2017-03-28 3 views
1

J'ai un dossier E: \ Tjuven avec plusieurs dossiers commençant par Andreas et contenant [ and ].Handling parenthèses dans les noms de fichiers et de noms dans PowerShell

Dans tous ces dossiers j'ai 2 fichiers que je veux renommer le nom de leur dossier. Ces fichiers incluent également [ and ] dans le nom.

J'ai donc écrit ceci:

$folderslist = Get-ChildItem -Path E:\Tjuven -Filter Andreas* 
$folders = $folderslist.Name 
ForEach ($folder in $folders) { 
    $fillista = Get-ChildItem -Path E:\Tjuven\$folder 
    $filer = $fillista.Name 
    ForEach ($fil in $filer) { 
     $filslut = $fil.Substring($fil.Length-3) 
     Rename-Item "E:\Tjuven\$folder\$fil" "E:\Tjuven\$folder\$folder.$filslut" 
    } 
} 

Cela fonctionne parfaitement lorsque les dossiers n'ont pas [ or ] en eux. Je sais que je peux utiliser literalpath pour rechercher des dossiers, etc., mais je n'arrive pas à comprendre comment gérer ces données lorsque je programme des actions sur plusieurs fichiers ou dossiers contenant des caractères spéciaux [ and ].

Quelqu'un a-t-il des idées pour que cela fonctionne? Si je peux écrire ce script de manière plus fluide, n'hésitez pas à me donner des conseils. Get-ChildItem et Rename-Item utilisent des crochets comme caractères génériques.

Répondre

2

Utilisation -LiteralPath au lieu de -Path:

$root = "F:\test"  
Get-ChildItem -Path $root | % { 
    $dirName = $_.Name 
    $files = Get-ChildItem -LiteralPath $_.FullName 
    $files | % { 
     Rename-Item -LiteralPath $_.FullName -NewName "$dirName$($_.Extension)" 
    } 
} 

Explication here