2013-08-18 40 views
8

我在此網站上發現了有關在Powershell中重命名文件的幾個解答,所以我很抱歉如果這是重複。我在谷歌和各種網站上花費了5個小時,試圖找出答案。我真的試圖解釋得很好。我不是一個程序員,只是對他們的申請一絲不苟。使用連續數字後綴對PowerShell中的文件進行批量重命名

我有14,000張照片按年份和月份分類爲多個文件,但是使用多個相機拍攝,我希望文件名能反映出拍攝的日期。例如,1998年10月16日的照片位於名爲1998 \ 10 October \ 19981016的文件夾中。我想所有的圖片被命名爲19981016_0001 19981016_0002等。我嘗試了多個建議,但它沒有奏效。可能是由於我缺乏程序員知識,哈哈。有人可以幫我解決問題嗎?我可以到達列出要更改的文件夾的位置,但我無法真正更改它。我所有的圖片都是.jpg。我嘗試附上我所做的一個截圖,但不幸的是我不能,因爲我太新了。提前致謝!

我創建了一個臨時文件副本,以防萬一我把它搞砸了。我開始通過輸入cd "C:\Documents and Settings\Brooke LastName\Desktop\Temp"然後成功讓我的文件加載後,我用我在這個論壇上找到的公式。

ls *jpg | Foreach {$i=1} {Rename-Item _ -NewName ("$($.19981016){0:00000000#} .jpg" -f $i++) -whatif} 

我得到的錯誤說

Unexpected token ' .19981016' in expression or statement. 

At line:1 char:12 + $.19981016 <<<< 

錯誤重複數次。

我在網上發現了幾個公式,但大多數創建的文件都會用圓括號編號,例如vacation(1).jpg。在我的約會結束後,我想要一個四位數的計數器,例如: 19981016_0001

回答

22

語法很差。有幾個問題:

  • 我不知道什麼$($.19981016)是爲了生產,但$()評估括號內的表達,結果插值到字符串,而你得到的錯誤,因爲$.19981016不是一個有效的表達式。該目錄中的每個.jpg文件都會重複該錯誤。
  • {0:00000000#}以格式化的字符串將創建一個零填充的9位數字,但更簡單的方法是{0:D9}。但是,我以爲你想零填充的數字有4位數字,所以應該是{0:0000#}{0:D4}
  • 我不確定Foreach {$i=1} { [...]應該做什麼。關鍵字foreach可以表示foreach循環,或者它可以是的簡寫符號Foreach-Object。在這種情況下,從管道接收輸入,它必然是後者,但是這種語法在任何方面都是不正確的。

這會做你想要什麼,如果我理解正確的描述:

$i = 1 
Get-ChildItem *.jpg | %{Rename-Item $_ -NewName ('19981016_{0:D4}.jpg' -f $i++)} 

的文件名會19981016_0001.jpg19981016_0002。JPG19981016_0003.jpg

的幾個注意事項:

  • 你說,你要像19981016_0001文件名,但我假設你想保持jpg擴展。
  • 需要初始化$ I,否則會從0開始,如果它尚未定義,或更糟糕的是,一些其他的號碼,如果$ I在同一PowerShell會話之前使用。舉例來說,如果你有1432個.jpg文件的目錄,你第一次運行該命令與-WhatIf,然後運行它真正的,這個數字將開始從1432
  • $ I ++增量$ i by 1.但是,如果您將其用作值,則會在之後讀取值後遞增;這就是爲什麼如果$ I是不明確的,它將從0
  • 開始的Get-ChildItem相同LS。我使用的本地PowerShell的名字,但他們互換(LSDIR,並GCIGET-ChildItem所有的別名)。
  • %{}是簡寫的foreach對象
+0

太謝謝你了!它工作完美。 – Brooke

+0

如果這解決了您的問題,請點擊答案左側的空心複選標記(點擊時變綠),將答案標記爲已接受。 –

+0

非常有用!感謝您的詳細信息..哪裏可以找到完整的文檔? :/我無法找到準確的文章,但這個線程,謝謝! – Stphane