2014-08-30 36 views
7

我有大約1000個圖像,它們的名稱類似於「IMG-12223」。我想將它們重命名爲1 2 3 4 ... 1000.我該怎麼做。我寫了一個列出文件的批處理腳本,但我不知道如何重命名每個文件。例如重命名的第一圖像名稱爲「IMG-12223」爲1,名稱爲「IMG-23441」到2,依此類推第二圖像...使用批處理腳本重命名目錄中的多個文件

for /r %%i in (*) do (
    echo %c% 
) 
+0

只是一個提示:免費多媒體查看器[IrfanView](http://www.irfanview.com/)已內置[批量重命名](http://graphicssoft.about.com/cs/renamers/ht /irfanviewrename.htm)功能可以用計數器重命名圖像。此外,共享軟件文件管理器[Total Commander](http://www.ghisler.com/)具有[多重命名](http://www.ghisler.com/advanced.htm#tutorial_rename)功能,具有更多選項和非常容易使用。在我看來,對於這樣的文件重命名任務不使用批處理文件作爲計劃任務自動執行是沒有意義的。 – Mofi 2014-08-30 21:41:31

回答

12

這裏的腳本。只需將腳本放入您的文件夾並運行即可。

@echo off & setlocal EnableDelayedExpansion 

set a=1 
for /f "delims=" %%i in ('dir /b *') do (
    if not "%%~nxi"=="%~nx0" (
    ren "%%i" "!a!" 
    set /a a+=1 
) 
) 

如果你想保持擴展,即重命名 「IMG-12223.jpg」, 「IMG-12224.jpg」 等,以 「1.JPG」, 「2.JPG」,等你可能會使用以下腳本。

@echo off & setlocal EnableDelayedExpansion 

set a=1 
for /f "delims=" %%i in ('dir /b *.jpg') do (
    ren "%%i" "!a!.jpg" 
    set /a a+=1 
) 

[更新]我這裏還有在傑克的評論中提到的行解釋。

  • setlocal EnableDelayedExpansion

一般情況下,我們希望變量a時,它的執行被推遲擴張而不是行被讀取。沒有它,變量a無法獲得其增加的值,但始終爲1.

有關EnableDelayedExpansion的詳細信息,請參閱答案https://stackoverflow.com/a/18464353/2749114

  • for /f "delims=" %%i in ('dir /b *.jpg')

這裏dir/b選項,只列出文件中的所有JPG文件的名稱。

for循環遍歷並重命名所有jpg文件。

對於delims選項,由於默認分隔符字符是空格,沒有選項delims=,因此文件名中包含空格的圖像文件會失敗。 I.E.對於名爲「img with spaces.jpg」的圖像文件,沒有選項,%%i的值是「img」,但不是全名「img with spaces.jpg」,這是不正確的。

對於for循環,請參閱頁面http://ss64.com/nt/for_f.html

  • if not "%%~ni"=="%~n0"

我必須將其更改爲if not "%%~nxi"=="%~nx0"更準確。所附代碼已更新。

它實際上用於避免重命名bat文件本身。如果我們只在「jpg」文件中限制重命名,則不需要該行。

%%~nxi是每個遍歷的文件的擴展名。 %~nx0是帶有擴展名的運行bat文件。詳情請參閱DOS BAT file equivalent to Unix basename command?

+0

感謝您的回覆,如果不是「%%〜ni」,請您解釋以下幾行「setlocal EnableDelayedExpansion」,「for/f」delims =「%% i in('dir/b * .jpg')」 ==「%〜n0」 – 2014-08-30 16:46:14

+0

當然,我剛剛對腳本進行了改進,並在您提到的行中添加了解釋。實際上,您也可以稍微更改腳本以將圖像的目錄作爲參數。 – Landys 2014-08-31 04:34:10

0

試試這個,你在文本文件中有一對名稱值,然後循環值並做魔法。 Namevalues由空格分隔。這允許您相應地映射舊的 - >新的文件名。或者你保留idx + 1計數器並將其用於新文件名。

keyvalue.bat

@echo off 
set idx=0 
for /F "tokens=1,2" %%A in (keyvalue.txt) do call :PROCESS "%%A" "%%B" 
GOTO :END 

:PROCESS 
set var1=%~1 
set var2=%~2 
set /A idx=%idx%+1 
echo %var1% goes to %var2% (%idx%) 
GOTO :EOF 

:END 
pause 

keyvalue.txt

file888.dat newfile1.dat 
file333.dat newfile2.dat 
file9.dat newfile3.dat 
file01.dat newfile4.dat 
7

沒有必要爲一個批處理腳本。從命令行簡單的一個班輪可以完成這項工作:-)

我使用DIR/B生成的文件列表,管道到FINDSTR編號的文件,所有附有n FOR/F解析結果和執行重命名。

for /f "delims=: tokens=1*" %A in ('dir /b *.jpg^|findstr /n "^"') do @ren "%B" "%A%~xB" 

如果要將命令放入批處理腳本中,請將雙倍百分比。

相關問題