Memindahkan banyak file ke nama yang cocok di disk lain di PowerShell
Saya mengunduh torrent yang sangat besar (1.2tb dengan lebih dari 6000 folder) yang dibagi menjadi 2 bagian, jadi saya menempatkan bagian ke-2 di tempat yang dirancang dan itu tidak menjadi masalah karena folder master dari torrent tersebut persis seperti yang dibutuhkan. Bagian pertama master-folder diberi nama dengan beberapa nama torrent generik daripada nama yang saya butuhkan, jadi alih-alih mengganti nama nama torrent menjadi "sumber", yang menurut saya akan berhasil dan mengganti nama nama umum saat ini menjadi "sumber". Di tab file saya memilih semua file dan klik kanan> relokasi semuanya dan bittorrent cukup memindahkan semua file ke direktori yang sama, tanpa subfolder, dan membuat kekacauan.
Jadi saya memiliki cadangan torrent yang belum selesai dan file sudah ada, jadi ide saya adalah menggunakan nama yang belum selesai, cocok dengan yang sudah selesai dan meletakkan yang sudah selesai di folder jalur nama yang cocok dan belum selesai. Saya harap itu jelas.
Saya mencoba menyelesaikan ini menggunakan PowerShell, tetapi saya tidak tahu banyak, jadi saya datang dengan ini dan tidak ada yang terjadi, ada yang salah. Ada yang tahu solusinya?
$itemlistA = Get-ChildItem -Path "D:\BitTorrent\" | ForEach-Object { $objnameA = $_.Name $objPathA = $_.FullName } $itemlistB = Get-ChildItem -Path "E:\DesiredPath\" -recurse |
ForEach-Object{
$objnameB = $_.Name
$objPathB = $_.FullName
}
ForEach-Object{
if($objnameA -eq $objnameB){
Copy-Item -path $objPathA -Destination $objPathB
Write-Host "ffff Object ($objnameA) new Path ($objPathB) ffff"
}
}
Jawaban
Jika saya memahami maksud Anda dengan benar, skrip di bawah ini akan mencapai tujuan Anda, dengan asumsi tujuan Anda adalah menyalin file dari direktori yang diratakan ke dalam beberapa (berpotensi) direktori bertingkat sehingga file yang masuk menimpa file dengan nama yang cocok.
Kinerja O (n ^ 2) dari loop bersarang dapat ditingkatkan dengan pencarian sortir dan lebih efisien.
Anda perlu mengedit parameter skrip untuk mencerminkan lingkungan Anda sendiri.
param(
$pathToFiles = "$PSScriptRoot\BitTorrent\",
$desiredPath = "$PSScriptRoot\DesiredPath\"
)
$itemlistA = Get-ChildItem -Path $pathToFiles | Select-Object -Property Name, FullName
$itemlistB = Get-ChildItem -Path $desiredPath -Recurse | Select-Object -Property Name, FullName
foreach ($fileA in $itemlistA) {
foreach ($fileB in $itemListB) {
if ($fileB.Name -eq $fileA.Name) {
Copy-Item -path $fileA.FullName -Destination $fileB.FullName -Verbose
break
}
}
}