2013-07-15 158 views
10

我在一個非常複雜的目錄結構中有大量文件,並且出於不值得討論的原因,我需要重命名具有「.inp」擴展名的所有文件以使「.TXT」擴展。還有很多其他擴展名的文件,我不想被觸及,我想遞歸地至少5級。遞歸地批量重命名文件擴展名(windows批處理)

到目前爲止,我有:

for /d %%x in (*) do pushd %%x & Ren *.inp *.TXT & popd 

...但是這僅下降目錄的一個級別。

任何人都可以幫忙嗎?提前致謝!

回答

16
for /r startdir %%i in (*.inp) do ECHO ren "%%i" "%%~ni.txt" 

應該爲你工作。將startdir替換爲您的起始目錄名稱,並且當您檢查完此作品後,請在ren之前刪除echo以實際進行重命名。


對於downvoters:執行批處理文件從命令excuting不同提示,每個%%x其中x是metavariable(循環控制變量)需要被減小到%,所以

for /r startdir %i in (*.inp) do ECHO ren "%i" "%~ni.txt" 

應該工作,如果你從提示執行此操作。請閱讀關於echo的說明。

+0

真棒!這就像一個黑魔法簡單而有效:) – myforums

+0

@Magoo ...我想我愛你。感謝這個解決方案,解決了我生命中需要花費兩天的問題,非常感謝! – Neville

20

在Windows 7上,下面的一行命令的作品對我來說,要重命名的所有文件,遞歸,在* .js文件* .TXT:

FOR /R %x IN (*.js) DO ren "%x" *.txt 
+3

這工作,選定的答案沒有,說:「%%我沒有預料到」。感謝你! –

+0

從接受的答案中的代碼中得到了同樣的錯誤「%%我未被預料到」。請注意,您必須cd到開始目錄 – brunettdan

+0

@SteveChamaillard:這是因爲所選答案假定該行在批處理文件中。如果從提示符執行,則需要將每個'%%'更改爲'%' – Magoo