2013-07-15 4 views
10

У меня есть много файлов в очень сложной структуре каталогов, и по причинам, которые не стоит обсуждать, мне нужно переименовать все файлы с расширением «.inp», чтобы иметь «.TXT», расширения. Есть много других файлов с другими расширениями, которые я не хочу трогать, и я хочу сделать это рекурсивно, по крайней мере, на 5 уровнях.Массовое переименование файловых расширений рекурсивно (пакет окон)

До сих пор у меня есть:

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 на свое начальное имя каталога, и когда вы проверили это, это сработает с вашей точки зрения, удалите echo перед ren, чтобы на самом деле переименовать.


Для downvoters: выполнение пакетного файла отличается от excuting из командной строки в том, что каждая %%x, где x является метапеременная (переменная цикла контроля) должна быть уменьшена до %, так что

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

должен работать, если вы выполните это из приглашения. Прочтите примечание о echo.

+0

Awesome! Это как черная магия простая и эффективная :) – myforums

+0

@Magoo ... я думаю, что люблю тебя. Спасибо за это решение проблемы, которая заняла 2 дня моей жизни, отличная работа! – Neville

20

В Windows 7, следующая команда работ однострочных для меня, чтобы переименовать все файлы рекурсивно, в * .js в * .txt:

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

Это сработало, выбранный ответ не был, сказал: «%% i был неожиданным». Спасибо за это ! –

+0

Похожая ошибка «%% i была неожиданна» из кода принятого ответа. Обратите внимание, что вам нужно будет cd в стартовом каталоге – brunettdan

+0

@SteveChamaillard: Это потому, что выбранный ответ предполагает, что строка находится в пакетном файле. Если это выполняется из приглашения, вам нужно изменить каждый '%%' на '%' – Magoo

Смежные вопросы