2011-06-15 185 views
6

我希望重命名文件夾* .txt, 中的所有文件,因此結果將爲 「1.txt」,「2.txt」和「3.txt」。 ...重命名Dos批處理文件中的多個文件

我該怎麼做?

+0

如果新名稱與舊名稱有任何關係,這無關緊要嗎?例如AAA.txt - > 1.txt,BBB.txt - > 2.txt – Kev 2011-06-15 14:48:18

+0

不,我想用串行命令重命名。 cat.txt,dog.txt,rat.txt - > 1.txt,2.txt,3.txt等 – JustMe 2011-06-15 14:51:57

回答

11

下可以完成你在找什麼。它使用for循環遍歷文本文件,並對批處理文件的另一位進行「調用」,以執行變量的重命名和增量操作。

編輯將數學運算更改爲由Andriy提出的更清潔的解決方案。

@echo off 
set i=1 
for %%f in (*.txt) do call :renameit "%%f" 
goto done 

:renameit 
ren %1 %i%.txt 
set /A i+=1 

:done 
+0

這樣做有兩個問題,只有一個文件已被重命名,如果文件名包含空格,則該批處理不能重命名任何文件 – JustMe 2011-06-15 16:19:20

+0

@JustMe:我編輯了響應並在'%% f'處加引號來處理帶空格的文件名。然而,並不清楚爲什麼只有一個文件會被處理。這可能是由於不同的DOS版本。 – 2011-06-15 16:34:09

+0

+1。順便說一句,「SET/A i = i + 1」或甚至「SET/A i + = 1」也可以。 – 2011-06-15 19:07:57

1

首先做一個目錄列表:

dir /b *.txt > myfile.cmd 

然後啓動UltraEdit的(http://www.ultraedit.com/)並打開該文件。

然後進入列模式,選擇所有的線條,以及:

  • 插入「重命名」,在每一行
  • 插入「.TXT」在每行的結束的開始(一定要投入情況下,它遠遠不夠的權利,你有很長的線)
  • 插入一個數字(見列/插入數字菜單).TXT
  • 前右
+1

不錯,但是我想用批處理文件(dos命令) – JustMe 2011-06-15 15:37:09

1

我要重命名的文件夾,* .TXT內的所有文件,因此其結果將是 「的1.txt」, 「2.txt」 和 「3.txt」,...

我該怎麼做?

::Setup the stage... 
SETLOCAL ENABLEDELAYEDEXPANSION 
SET folder=C:\This\Is\The\Folder 
SET count=1 

::Action 
CD "%folder%" 
FOR %%F IN ("*.txt") DO (
MOVE "%%F" "!count!.txt" 
SET /a count=!count!+1 
) 
ENDLOCAL 

速記

SETLOCAL ENABLEDELAYEDEXPANSION 
SET count=1 
FOR %%F IN (C:\Path\To\File\*.txt) DO MOVE "%%~fF" "%%~dpF!count!.txt" & SET /a count=!count!+1 
ENDLOCAL 

所以,如果你的文件夾包含cat.txt,dog.txt,bird.txt,ninjaturtle.txt,它將輸出的1.txt,2.txt,3.txt ,4.txt。