2013-10-12 2 views
1

Здесь (суб) папки (s) является код:Batch File - Переименование файлов на основе родительского имени и имени

for /r %%a in (*.jpg, *.png, *.bmp, *.exe) do (
    for /d %%d in (%CD%) do (
    set newname=%%~nd%~x1 
    ren "%%~a" "!newname!%%~Xa" 
    echo media file in %%~fa renamed to "!newname!%%~Xa" 
) 
) 

Основная проблема заключается в том, что файлы в подпапки в конечном итоге с именем файла в качестве родителя имя каталога. Я запускаю файл bat.

Пример того, что происходит:

C:\parent\name.jpg renamed to C:\parent\parent.jpg 
C:\parent\child\name.jpg renamed to C:\parent\child\parent.jpg 
C:\parent\child1\child2\name.jpg renamed to C:\parent\child1\child2\parent.jpg 

мне нужно:

C:\parent\1.jpg rename to C:\parent\parent.jpg 
C:\parent\child\1.jpg rename to C:\parent\child\child.jpg 
C:\parent\child1\child2\name.jpg renamed to C:\parent\child1\child2\child2.jpg 

Любая помощь?

ответ

2

Это отобразит команды ren на экране.
Измените ключевое слово echo, чтобы оно действительно выполняло переименования.

@echo off 
for /r %%a in (*.jpg *.png *.bmp *.exe) do for %%b in ("%%~dpa\.") do echo ren "%%~a" "%%~nxb%%~xa" 
pause 

Первый %% A Для команды возвращает каждый специф_файлов рекурсивно и формат каждого файла:
c:\path\to\folder\filename.ext

Второй %% B Для дается c:\path\to\folder часть и \. добавляют к end делает его c:\path\to\folder\., который разрешает текущий каталог to и делает его интерпретированием folder как имя файла.

Таким образом, %%~nxb возвращает имя файла и расширение %% b, которое в этом случае равно folder, и используется в команде rename. %%~xa возвращает .extension строки %% a.

Надеюсь, это довольно ясно, вместе с рассмотрением кода.

Последняя страница справочника FOR /? описывает метапеременные.

+0

Хорошо, что сработало отлично в строке кода. Вы хотите немного объяснить команды? –

+0

Спасибо. См. Отредактированный ответ. – foxidrive

+0

Большое вам спасибо. Это очень полезно. –

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