2013-03-10 2 views
8

Я очень новичок в командной строке и только начал использовать его по состоянию на 1 день назад.Как сменить расширение файлов в подпапках

У меня есть папка в местоположении, например C:\Users\Administrator\Desktop\Images, а внутри этой папки имеется около 650 подпапок, каждая из которых содержит около 20 изображений, сочетание JPG и PNG. Я ищу командную строку для CMD, которая будет проходить через все подпапки и изменить каждый файл .png в файл .jpg.

Я провел небольшое исследование и нашел некоторую информацию, однако очень сложно следовать и понимать, и я все еще не могу этого сделать. Я хочу сохранить имена файлов, однако измените каждое расширение файла с .png на .jpg.

Я понимаю, что для 1 папки, это что-то вроде ren *.png *.jpg. Однако это не касается изменений в подпапках.

+0

Я думаю, что этот вопрос принадлежит [суперпользователя] (http://superuser.com/), а не StackOverflow. Stack Overflow предназначен для программирования вопросов. – Jesse

+1

@Jesse: Есть много вопросов о SO о пакетном или другом программировании оболочки, или аналогичным образом, программирование bash. Почему это, в частности, не подходит? –

+0

@Jesse: В самом деле, речь идет о скриптах, а не только о готовом инструменте. Сценарии тоже программируются, особенно когда для этого требуются структуры управления, например, циклы. –

ответ

13

Если я правильно понимаю, что вы хотите только переименовать файлы из .png в .jpg, а не конвертировать их, вы можете использовать следующий пакетный код:

@ECHO OFF 
PUSHD . 
FOR /R %%d IN (.) DO (
    cd "%%d" 
    IF EXIST *.png (
     REN *.png *.jpg 
    ) 
) 
POPD 

Обновление: Я нашел лучше решение here, что вы можете запустить прямо из командной строки (используйте %%f в смену %f, если использовать это в пакетном файле):

FOR /R %f IN (*.png) DO REN "%f" *.jpg 

Обратите внимание, что приведенное выше будет обрабатывать текущий каталог и его подкаталоги. При необходимости, вы можете указать произвольный каталог в качестве корня, например:

FOR /R "D:\path\to\PNGs" %f IN (*.png) DO REN "%f" *.jpg 
+1

'pushd .'? Какой смысл (если вы прощаете каламбур)? :) –

+0

@AndriyM: Funny pun :-) Я хотел убедиться, что командная строка вернется в исходный каталог после завершения во всех подкаталогах и не попадет в каталог, в который он в последний раз попал. Есть ли лучший способ достичь этого? –

+0

An * альтернативный * способ, да. Было бы лучше, я не уверен. То, что я имею в виду, заключается в хранении '% CD%' в переменной перед циклом, а затем CD-ing. Две команды тоже, но слишком банальные, я думаю. :) Ваше объяснение имеет для меня прекрасный смысл, спасибо за это. –

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