2013-06-16 4 views
4

У меня есть много файлов со следующей структурой:Переименование файлов по иерархии папок

1969/ar/1.jpg 
1969/ar/2.jpg 

1969/he/1.jpg 
1969/he/2.jpg 

1969/en/1.jpg 
1969/en/2.jpg 

1970/ar/1.jpg 

и т.д ...

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

1969_ar_1.jpg 
1969_ar_2.jpg 

1969_he_1.jpg 
1969_he_2.jpg 

1969_en_1.jpg 
1969_en_2.jpg 

1970_ar_1.jpg 

и т.д ...

Можно ли сделать это с помощью одной команды или пакетного файла?

Спасибо!

ответ

4

Вы можете сделать это, чтобы переместить файлы в папке базы с этой командой -line:

for /R %a in (*) do @set f=%a& set f=!f:%cd%\=!& move "%a" !f:\=_! 

Выполните его из папки, содержащей папки 1969, 1970 .... ВАЖНО !: Отсроченное расширение должно быть активным, чтобы эта линия работала, поэтому вы должны предварительно активировать ее, выполняя cmd.exe с помощью/V-переключателя следующим образом: cmd /V.

Например:

>xcopy test backup /s 
test\1969\ar\1.jpg 
test\1969\ar\2.jpg 
test\1969\en\1.jpg 
test\1969\en\2.jpg 
test\1969\he\1.jpg 
test\1969\he\2.jpg 
test\1970\ar\1.jpg 
7 File(s) copied 

>cd test 

>dir /B 
1969 
1970 

>for /R %a in (*) do @set f=%a& set f=!f:%cd%\=!& move "%a" !f:\=_! 

>dir /B 
1969 
1969_ar_1.jpg 
1969_ar_2.jpg 
1969_en_1.jpg 
1969_en_2.jpg 
1969_he_1.jpg 
1969_he_2.jpg 
1970 
1970_ar_1.jpg 

изменить строку таким образом, чтобы переместить файлы в другую папку:

for /R %a in (*) do @set f=%a& set f=!f:%cd%\=!& move "%a" "\other\folder\!f:\=_!" 

Или через этот пакетный файл:

@echo off 
setlocal EnableDelayedExpansion 
for /R %%a in (*) do set f=%%a& set f=!f:%cd%\=!& move "%%a" "\other\folder\!f:\=_!" 
3

Запустите это с базы дерева, которое содержит все файлы * .jpg. Измените целевую папку туда, куда вы хотите, чтобы файлы были отправлены:

Сначала проверьте его на некоторых образцах.

@echo off 
for /f "delims=" %%z in ('dir "*.jpg" /b /s /a-d ') do (
for %%a in ("%%~dpz%\.") do (
for %%b in ("%%~dpa\.") do (
    ren "%%z" "%%~nxb_%%~nxa_%%~nxz" 
    move "%%~dpz\%%~nxb_%%~nxa_%%~nxz" "c:\target\folder" 
) 
) 
) 
pause 
3

попробовать это (смотрите на выходе и убрать слово echo перед тем move, если это нормально):

@echo off &setlocal 
for /d %%i in (19* 20*) do (
    cmd /c "for /r "%%i" %%j in (*.jpg) do @for %%k in ("%%~dpj.") do @echo move "%%~j" "%%i_%%~nk_%%~nxj"" 
) 
+0

Если бы папку дважды ('folder_folder_file'), но работал после удаления' %% ~ nk_' - хотя я не совсем понимаю эту классную линию ... Спасибо! – BurninLeo