2016-11-12 113 views
2

我有一系列的文件夾和子文件夾中,以這種方式構成:遞歸重命名文件在所有子文件夾按順序

  • 001 /面料/藍/(.jpg文件,順序命名)
  • 001 /面料/綠/(.jpg文件,依次命名)
  • 002 /光纖/藍/(.jpg文件,依次命名)
  • 002 /光纖/綠/(.jpg文件,依次命名)

文件名有多餘的字符串我想刪除,我想將它們的文件名轉換爲更簡單的順序格式(0.jpg,1.jpg等)。

我試着用幾個不同的PowerShell例子來使這個工作。我有遞歸搜索功能工作,但是當嘗試重命名ForEach-Object循環中的文件時,我收到有關InvalidOperationException的錯誤。此外,恐怕我的順序編號並未針對重命名文件的每個文件夾進行「重置」。

$i = 0 
Get-ChildItem -Filter "*.jpg" -Recurse | ForEach-Object { 
    Rename-Item $_ -NewName ('$i.jpg' -f $i++) 
} 

於是,兩個問題:

  1. 我怎樣才能修復與Rename-Item錯誤?
  2. 如何確保我的變量重置爲每個子文件夾腳本開始重命名文件?

回答

2

如果你採取兩步辦法,首先獲取所有包含jpg的文件夾,然後遍歷這個列表,但從1開始沒有問題。但是我總是使用前導零來實現這樣的重新編號。

$BaseFld = "Q:\Test\" 
$Ext = "*.jpg" 
$jpgFolders = gci $($BaseFld+$Ext) -Recurse | 
    Select -ExpandProperty Directory -Unique | 
    select -ExpandProperty Fullname | Sort 

ForEach ($Folder in $jpgFolders) { 
    Set-location $Folder 
    $i = 1 
    Get-ChildItem $Ext | %{Ren $_ -NewName ('{0:D4}.jpg' -f $i++) -whatif} 
} 

如果ouptut適合你,取出-whatif在倒數第二行

+0

哇,太神奇了!我不知道我可以用這種方式使用Powershell。 Re:重新編號中的前導零;有什麼辦法可以避免你的例子中的前導零?我如何才能將這些短代碼轉換爲當前的$ i var編號? – connormw

+0

將'{0:D4}'更改爲'{0}',您應該完成。 – LotPings

+0

你是一個絕對的救星。非常感謝! – connormw

0

其他方法

$rootdir="C:\temp" 
gci $rootdir -Recurse -Directory | %{$i=1; gci $_.FullName -Recurse -File -Filter "*.jpg" | %{Ren $_.FullName -NewName ('{0}.jpg' -f $i++)} }