2017-03-28 2 views
1

Ich habe einen Ordner E: \ Tjuven mit mehreren Ordnern beginnend mit Andreas und mit [ and ].Handhabung Klammern in Dateinamen und Ordnernamen in PowerShell

In all diesen Ordnern habe ich 2 Dateien, die ich in den Namen ihres Ordners umbenennen möchte. Diese Dateien enthalten auch [ and ] im Namen.

Also schrieb ich folgendes:

$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" 
    } 
} 

Dies funktioniert perfekt, wenn die Ordner nicht [ or ] in ihnen haben.

Ich weiß, ich kann Literalpath zum Nachschlagen von Ordnern usw. verwenden, aber ich kann nicht herausfinden, wie man mit diesen Daten beim Schreiben von Aktionen auf mehrere Dateien oder Ordner mit Sonderzeichen [ and ] in ihnen umzugehen.

Wer hat irgendwelche Ideen, wie man das funktioniert? Wenn ich dieses Skript auf eine sanftere Weise schreiben kann, geben Sie mir auch gerne Tipps.

Antwort

2

Get-ChildItem und Rename-Item verwenden eckige Klammern als Platzhalterzeichen. Verwenden -LiteralPath statt -Path:

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

Erklärung here

Verwandte Themen