Déplacement de plusieurs fichiers vers des noms correspondants dans un autre disque dans PowerShell
Je téléchargeais un énorme torrent (1,2 To avec plus de 6000 dossiers) divisé en 2 parties, j'ai donc placé la 2ème partie à l'endroit prévu et ce n'était pas un problème puisque le dossier maître du torrent est exactement ce qu'il fallait. Le dossier principal de la première partie a été nommé avec un nom de torrent générique au lieu du nom dont j'avais besoin, donc au lieu de renommer le nom du torrent en "source", ce qui, je pense, aurait fonctionné et renommé le nom générique actuel en "source". Dans l'onglet Fichiers, j'ai sélectionné tous les fichiers et un clic droit> les déplacer tous et bittorrent a simplement déplacé tous les fichiers dans le même répertoire, sans aucun sous-dossier, et créé un désordre.
J'ai donc une sauvegarde non terminée de ce torrent et les fichiers sont en place, donc mon idée était d'utiliser le nom de celui qui n'est pas terminé, de faire correspondre les noms finis et de mettre les fichiers finis dans le dossier de chemin du nom correspondant non terminé. J'espère que c'était clair.
J'ai essayé de résoudre ce problème en utilisant PowerShell, mais je ne sais pas grand-chose, alors j'ai trouvé cela et rien ne se passe, quelque chose ne va pas. Quelqu'un connaît une solution?
$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"
}
}
Réponses
Si je comprends bien votre intention, le script ci-dessous atteindra votre objectif, en supposant que votre objectif est de copier des fichiers d'un répertoire aplati dans certains répertoires (potentiellement) imbriqués afin que les fichiers entrants écrasent les fichiers avec des noms correspondants.
Les performances O (n ^ 2) des boucles imbriquées pourraient être améliorées avec un tri et une recherche plus efficace.
Vous devrez modifier les paramètres du script pour refléter votre propre environnement.
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
}
}
}