2011-01-07 16 views
0

Ich habe einige 100 Dateien in einem Ordner. Ich möchte diese Dateien umbenennen. Das Format der Dateien ist wieKomplexe Datei umbenennen

AB1234.gif  
B3245.gif 
AB2541.gif 
AB11422.jpg 

und so weiter ..

Ausgabedateien shld sein

AB-0111-1.gif 
B-0111-2.gif 
AB-0111-3.gif 
AB-0111-4.jpg 

Logic

wird
for(int n=0;n<files.count;n++){ 
    if(file is starting with AB) 
     fileName = AB + "-0111" + n; 
    if(file is starting with B) 
     fileName = B + "-0111" + n; 
} 

Ist das, was möglich mit Powershell-Skript ?

Antwort

2

Mit dem Dateinamen Format, das Sie beschreiben, können Sie die Powershell -replace Operator verwenden, um die mittleren Ziffern mit dem Ausdruck zu ersetzen, die Sie wollen. Der einzige knifflige Teil ist, dass Sie einen Zähler beim Durchlaufen der Elemente pflegen müssen. Es würde so aussehen:

dir | foreach -begin{$cnt = 1} -process { mv $_ ($_.Name -replace '\d+',"-0111-$cnt"); $cnt += 1} 
1

Sie können [System.IO.Path] :: GetExtension die Erweiterung der Datei wie folgt erhalten:

$ext = [System.IO.Path]::GetExtension('AB1234.gif') 

und Sie können die erste Alpha-Zeichen des Dateinamens mit der $matches Variable erhalten wie folgt aus:

if ('AB1234.gif' -match '^\D*') { $first = $matches[0]; } 

und Sie können Ihre neuen Dateinamen wie folgt aufbauen:

$first + '-0111-' + '1' + $ext 

Sie können die ‚1‘ oben durch eine Variable ersetzen, die Sie durch Prüfen der existiert Eigenschaft wie folgt erhöht werden: mit $first + '-0111-' + $i + $ext und Sie können Sie benötigen

$i = 1; 
while (test-path ($first + '-0111-' + $i + $ext)) {$i++} 

wenn diese Schleife abgeschlossen ist, müssen Sie den Dateinamen Hier können Sie die Datei mit Rename-File umbenennen:

Rename-File 'AB1234.gif' ($first + '-0111-' + $i + $ext) 

jetzt, wickeln, dass alle in einer Schleife und Sie sollten es haben:

dir | ForEach-Object { ... } 

zum Testen, fügen Sie den Parameter -whatif am Ende des Befehls Rename-File hinzu und PS wird Ihnen sagen, was es tun würde, anstatt die Aktion auszuführen.

Dank, Marke

+0

jetzt, dass Sie geklärt haben, was Sie suchen, können Sie die Antwort von zdan geschrieben verwenden. Von deinem ursprünglichen Post dachte ich, dass du etwas Komplexeres suchst. – Mark