2011-01-07 195 views
0

我在一個文件夾中有大約100個文件。我想重命名這些文件。文件的格式是這樣複雜文件重命名

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

等..

輸出文件SHLD是

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

邏輯將

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; 
} 

這事可能與PowerShell腳本?

回答

2

的文件名格式,您描述,您可以使用PowerShell的-replace運營商所需的表達式替換中間的數字。唯一棘手的部分是,當你循環項目時,你必須保持一個計數器。它看起來像這樣:

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

您可以使用[System.IO.Path] :: GetExtension獲得文件的這樣的擴展:

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

,您可以使用$matches變量獲取文件名的第一個字母字符像這樣:

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

,你可以建立新的文件名是這樣的:

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

您可以用您可以通過檢查存在這樣的屬性增加一個變量替換「1」上面:

$i = 1; 
while (test-path ($first + '-0111-' + $i + $ext)) {$i++} 
當這個循環完成

,你將有你需要$first + '-0111-' + $i + $ext的文件名,你可以現在

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

,包裝全部在了一個循環,你應該有它::使用此文件與Rename-File重命名

dir | ForEach-Object { ... } 

進行測試,將-whatif參數添加到Rename-File命令的末尾,PS會告訴您它將執行什麼操作,而不是實際執行操作。

感謝, 標記

+0

既然您已經說明了您在找什麼,您可以使用zdan發佈的答案。從你原來的文章中,我以爲你正在尋找更復雜的東西。 – Mark 2011-01-08 02:42:16