2012-12-19 1 views
1

Je voudrais aplatir la structure de dossiers et, d'une certaine façon, inclure chaque nom de répertoire parent dans le nom de fichier. Je l'ai essayé, mais je reçois une erreur:aplatir les fichiers, y compris le nom de fichier dans le nom de fichier

Missing ')' in method call 

Je suis tout à ne vois pas quel est le problème

(ls -r -include *.ext) | % { mv -literal $_\3 $_\3.Name.Insert(0, [String]::Format("{0} - ", $_\3.Directory.Name))} 

Répondre

4

Essayez ceci:

ls . -r *.ext -name | ?{!$_.PSIsContainer} | mi -dest {$_ -replace '\\','_'} -whatif 

Ou si le V3:

ls . -r *.ext -name -file | mi -dest {$_ -replace '\\','_'} -whatif 

Retirez le -whatif pour effectuer réellement le mouvement.

+0

fonctionne comme un charme. Merci! – Nico

+0

Echec si le chemin contient des crochets []. Il semble qu'il faut utiliser LiteralPath. Pouvez-vous mettre à jour avec elle? –

1

Voulez-vous aplatir la structure du dossier et déplacer tous les fichiers renommés à le répertoire racine? Par exemple:

$rootPath = 'C:\TempPath' 
(ls $rootPath -r -include *.ext) | %{ 
    [string]$newFilename = $_.Name.Insert(0, [String]::Format("{0} - ", $_.Directory.Name)) 
    #write-host $newFilename 
    mv -literal $_ "$rootPath$newFilename" 
} 
+0

oui. Je voudrais déplacer tous les fichiers avec l'extension donnée existante dans n'importe quel sous-dossier à la racine et changer leurs noms de fichiers en nom de fichier, y compris la structure de dossier à root. votre script renvoie l'erreur suivante: Vous ne pouvez pas appeler une méthode sur une expression null-value. A C: \ remove.ps1: 3 char: 42 + [chaîne] $ nouveauFichier = $ _. Name.Insert (<<<< 0, [String] :: Format ("{0} -", $ _ .Directory.Name)) Move-Item: Impossible de lier l'argument au paramètre 'LiteralPath' car il est nul. En C: \ remove.ps1: 5 char: 16 + mv -literal <<<< $ _ "$ rootPath $ newFilename" – Nico

Questions connexes