2012-11-30 164 views
0

我有一個目錄10K文件,這種類型的命名約定:使用PowerShell重命名文件,並創建子文件夾

1050_14447_Letter Extension.pdf,1333_14444_Letter.docx等..

我嘗試使用此腳本刪除第二個下劃線(包括第二個下劃線)之前的所有字符:

Get-ChildItem -Filter *.pdf | Rename-Item -NewName {$_.Name -replace '^[0-9_]+'} 

這工作,但透露會有重複的文件名稱。

想知道是否有某種方式腳本可以基於文件名(減去擴展名)創建一個子文件夾?所以我的主文件夾中會有10K個子文件夾。每個子文件夾都只有一個文件。

+1

豈不你在子文件夾名稱命名的衝突呢? – zdan

回答

1

這應該工作。它爲每個項目創建一個新文件夾,然後移動它,並在過程中重命名它。

gci | ? {!$_.PSIsContainer} | % {New-Item ".\$($_.BaseName)" -Type Directory; Move-Item $_ ".\$($_.BaseName)\$($_.Name -replace '^[0-9_]+')"} 

注意,如果有兩個文件具有相同的名稱,但不同的擴展名,你會試圖創建目錄時,看到一個錯誤,但是這兩個文件將在同一文件夾風。

或者,如果你想要更多的東西可讀的腳本保存,這是功能相同:

$files = Get-ChildItem | Where-Object {!$_.PSIsContainer} 
foreach ($file in $files) 
{ 
    $pathName = ".\" + $file.BaseName 
    New-Item $pathName -Type Directory 
    $newFileName = $pathName + "\" + ($file.Name -replace '^[0-9_]+') 
    Move-Item $file $newFileName 
} 
+0

感謝和好點。我如何更新我的原始腳本遍歷主文件夾中的所有子文件夾進行重命名?我真的不在乎文件夾名稱是什麼,或者它包含前兩組數字。 – obautista

+0

我已經更新了我的答案,以顯示如何在移動到子目錄時對其進行重命名。 – KevinD

+0

非常感謝!你已經得到了巨大的幫助! – obautista

相關問題