1 votes

Déplacer les dossiers contenant une chaîne et conserver la structure des dossiers

J'ai un dossier F:\Music avec beaucoup de sous-dossiers, certains d'entre eux contiennent la chaîne [flac] dans leur nom de dossier, j'aime déplacer tous les dossiers avec leur contenu, qui contiennent la chaîne [flac], dans un nouveau dossier tout en conservant toutes les structures de dossiers. Certains chemins vont plus profondément que juste un seul dossier.

get-item "F:\Music\*\*[flac]" | 
foreach ($_){
    $oldpath = $_.FullName; 
    $newpath = "F:\Musicflac\"+$_.Parent; 
    robocopy $oldpath $newpath /MOVE /E
}

Après avoir cherché et essayé, je suis arrivé à ce script PS, qui ne renvoie aucune erreur mais aussi aucun résultat. J'ai trouvé un sujet similaire mais cela fonctionne uniquement en bash : Move folders containing files with extension. Je suis complètement nouveau en PowerShell.

Éditer 1:

J'ai également essayé avec Move-Item :

$paths = Get-ChildItem "F:\Music\*\*[flac]" | select fullname | ForEach-Object {$_.fullname}
$destination = "F:\Musicflac\"
foreach ($path in $paths){
    Move-Item $path -Destination $destination
}

Encore une fois, rien ne se passe, les difficultés pour moi sont : le doit contenir la chaîne [flac] et le garder la structure des dossiers.

Éditer 2:

Votre script a donné des erreurs au départ mais après quelques ajustements j'ai enfin obtenu des résultats:

gci "F:\Zandbak\Music\" -directory -recurse -filter '*[flac]*' |
   %{
        #calculer le nouveau chemin
        $newpath = $_.fullname -replace 'Music', 'Musicflac'

        #vérifier si le nouveau chemin existe, sinon le créer
        if(!(test-path -Path $newpath)){ new-item $newpath -itemType directory }

        #déplacer le dossier et son contenu vers un autre dossier
        Move-Item -Path $_.FullName -Destination $newpath
   }

Plus d'erreurs et les bons dossiers dans le répertoire Musicflac sont créés! Malheureusement, les fichiers dans les dossiers ne sont pas déplacés avec les dossiers, seuls des dossiers vides sont créés.

Des conseils pour déplacer également le contenu des dossiers?

Éditer 3:

structure du répertoire:

F:\Zandbak\Music\A Winged Victory for the Sullen\2011 A winged victory for the sullen
F:\Zandbak\Music\A Winged Victory for the Sullen\2011 A winged victory for the sullen [flac]
F:\Zandbak\Music\A Winged Victory for the Sullen\2011 A winged victory for the sullen\2014 Atomos IXII
F:\Zandbak\Music\A Winged Victory for the Sullen\2011 A winged victory for the sullen\2014 Atomos IXII [FLAC]
F:\Zandbak\Musicflac

0voto

Keith Miller Points 6004

Ma réputation n'est pas assez bonne pour commenter encore :D

Avez-vous vérifié que vous recevez les articles en premier lieu? Testez votre commande Get-ChildItem seule pour voir si elle renvoie les dossiers souhaités?

Je suggère d'essayer:

gci "F:\Zandbak\Music" -directory -recurse -filter '*[flac]*' |
   %{
     $newpath = $_.Parent.fullname -replace 'F:\\Zandbak\\Music', 'F:\Zandbak\Musicflac'
     Si (!(test-path $newpath))
        {new-item $newpath -itemType directory -whatif}
     Move-Item $_.FullName $newpath -Whatif
   }

Si le résultat du code ci-dessus indique qu'il va créer et déplacer les dossiers corrects, supprimez les paramètres '-WhatIf' de new-item et move-item.

Keith

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X