2010-06-01 26 views
1

我想編寫一個簡短的PowerShell腳本進行重命名文件,如:重命名文件與支架的索引

abc(1), abc(2), .., abc(10), .., abc(123), .. 

abc(001), abc(002), .., abc(010), .., abc(123), ..

任何想法? :)

回答

6

試試這個:

Get-ChildItem abc* | Where {$_ -match 'abc\((\d+)\)'} | 
Foreach {$num = [int]$matches[1]; Rename-Item $_ ("abc({0:000})" -f $num) -wh } 

的當流水線階段正在做兩件事情。首先,只傳遞匹配指定模式的文件名。其次,它使用捕獲組來抓取坐在$matches[1]中的名稱的數字部分。

Foreach階段將腳本應用於每個項目,由$_代表,將其傳遞給它。它所做的第一件事是獲取舊文件名的「數字」部分。然後它使用Rename-Item(PowerShell的重命名命令)將$ _表示的舊名稱重命名爲使用格式化字符串"abc({0:000})" -f $num計算的新名稱。在這種情況下,格式化指令進入{},其中0代表在-f之後指定的值的位置。 :000是一個格式化指令,顯示最多三個前導零的數字。最後,-wh-WhatIf的簡稱,它指示像Rename-Item這樣的潛在破壞性操作來顯示它將在沒有實際做任何事情的情況下做什麼。一旦你滿意的命令工作正常,刪除-wh並再次運行。

+0

如果你提供了一些有關某些語法的解釋,比如Rename-Item,那將會很棒。否則,以上是線性噪音,沒有讀取很多的PowerShell文檔。 – 2010-06-01 23:18:11

+0

完成。只是想在我不得不去執行任務之前給你一個解決方案。 – 2010-06-02 01:10:16

+0

這就是我一直在尋找的!完全理解的解釋。謝謝:) – user355889 2010-06-02 06:41:30