Spostamento di più file in quelli con nome corrispondente in un altro disco in PowerShell
Stavo scaricando un enorme torrent (1.2tb con oltre 6000 cartelle) diviso in 2 parti, quindi ho posizionato la seconda parte nel luogo progettato e non è stato un problema poiché la cartella principale del torrent è esattamente ciò di cui avevamo bisogno. La cartella principale della prima parte è stata nominata con un nome torrent generico invece del nome di cui avevo bisogno, quindi invece di rinominare il nome torrent in "sorgente", che penso avrebbe funzionato e rinominato il nome attualmente generico in "sorgente". Nella scheda file ho selezionato tutti i file e ho fatto clic con il pulsante destro del mouse> riposizionali tutti e bittorrent ha semplicemente spostato tutti i file nella stessa directory, senza alcuna sottocartella, creando un pasticcio.
Quindi ho un backup non finito di questo torrent e i file sono a posto, quindi la mia idea era usare il nome non finito, abbinarlo a quelli finiti e mettere quelli finiti nella cartella del percorso del nome corrispondente non finito. Spero sia stato chiaro.
Ho provato a risolverlo usando PowerShell, ma non so molto, quindi mi è venuto in mente e non succede nulla, qualcosa non va. Qualcuno conosce una soluzione?
$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"
}
}
Risposte
Se capisco correttamente il tuo intento, lo script seguente realizzerà il tuo obiettivo, supponendo che il tuo obiettivo sia copiare i file da una directory appiattita in alcune directory (potenzialmente) nidificate in modo che i file in arrivo sovrascrivano i file con nomi corrispondenti.
Le prestazioni O (n ^ 2) dei cicli annidati potrebbero essere migliorate con una ricerca ordinata e più efficiente.
Dovresti modificare i parametri dello script per riflettere il tuo ambiente.
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
}
}
}