2017-02-21 206 views
0

我有一個文件目錄,其中包含許多文件夾。在每個這些子文件夾中,我都有各種文件。我想瀏覽每個文件,重命名一些項目,併爲其中一些項目添加擴展名。我正在使用Powershell來做到這一點。循環通過子文件夾重命名Powershell中的文件

我的文件名是「。」例如,「wrfprs_d02.03」應該是「wrfprs_d02_03」。我是能夠成功地做到這一點與下面的代碼在一個文件夾中:

dir | rename-item -NewName {$_.name -replace "wrfprs_d02.","wrfprs_d02_"} 

後,我會把這些替代,我想添加到一些文件.grb擴展,這一切發生下手「 W」,我能夠做一個文件夾中有:

Get-ChildItem | Where-Object {$_.Name -match "^[w]"} | ren -new {$_.name + ".grb"} 

當我一步從一個文件夾,並嘗試多個文件夾內反覆這樣做,我的代碼不能正常工作。我在一個名爲「Z:\ Windows.Documents \ My Documents \ Test_data \ extract」的目錄中,其中包含我想要遍歷的所有子文件夾。我正在使用以下代碼:

$fileDirectory = "Z:\Windows.Documents\My Documents\Test_data\extracted" 
foreach($file in Get-ChildItem $fileDirectory) 
{ 
dir | rename-item -NewName {$_.name -replace "wrfprs_d02.","wrfprs_d02_"} 
Get-ChildItem | Where-Object {$_.Name -match "^[w]"} | ren -new {$_.name + ".grb"} 
} 

有關我的問題是什麼的任何想法?

回答

0

不知道你得到了什麼錯誤,但使用重命名項目可以是挑剔的。或者至少在我的經驗中如此。

我用了以下沒有問題。我的文件名稱不同,所以我用下劃線替換了所有的句點。如果文件以「W」開頭,則它改變了該文件的擴展名。

$FilePath = Get-ChildItem "Z:\Windows.Documents\My Documents\Test_data\extracted" -Recurse -File 
foreach ($file in $FilePath) 
{ 
    $newName = $file.Basename.replace(".","_") 
    $New = $newName + $file.Extension 

    if($file.Name -match "^[w]") 
    { 
      Rename-Item $file.FullName -NewName "$($New).grb" 
    } 
    else 
    { 
     Rename-Item $file.FullName -NewName $New 
    } 
} 

希望有幫助。

+0

謝謝!該代碼幾乎爲我工作。由於我正在使用的特定文件,我做了一些修改。我看到文件名稱改變「。」到Powershell窗口中的「_」,但是當我打開Windows資源管理器時,這些句點實際上並未改變爲下劃線。雖然已經添加了擴展,所以該部分已解決! – Amelia

+0

你是對的,我們做了修改,但從未真正保存過這些修改。我現在用一個適當的例子更新它。希望這有助於讓我知道,如果沒有。 – JonnyBoy

0

因爲當您使用管道時,$ _被替換爲循環。我建議你一個新的代碼:

$fileDirectory = "Z:\Windows.Documents\My Documents\Test_data\extracted" 

Get-ChildItem $fileDirectory -recurse -file -filter "*.*" | 
%{ 

#replace . by _ 
$NewName=$_.Name.Replace(".", "_") 

#add extension grb if name start by w 
if ($NewName -like "w*") {$NewName="$NewName.grb"} 

#Add path file 
$NewName=Join-Path -Path $_.directory -ChildPath $NewName 
#$NewName 

#rename 
Rename-Item $_.FullName $NewName 

} 
+0

我收到以下錯誤代碼: Get-ChildItem:找不到與參數名稱'file'匹配的參數。 – Amelia

+0

你的PowerShell版本是什麼? – Esperento57