按文件夹层次结构重命名文件

时间:2013-06-16 10:11:43

标签: windows batch-file

我有很多具有以下结构的文件:

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

等...

是否可以使用一个命令或批处理文件执行此操作?

谢谢!

3 个答案:

答案 0 :(得分:4)

您可以使用此命令行将文件移动到基​​本文件夹:

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

从包含1969,1970 ...文件夹的文件夹中执行它。重要!:延迟扩展必须处于活动状态才能使此行正常工作,因此您必须先激活它,并使用/ V开关执行cmd.exe: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:\=_!"

答案 1 :(得分: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

答案 2 :(得分: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""
)