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

ETC...

我想用一个命令将它们全部重命名为一个目录,而它们的名称反映了它们的原始文件夹位置。

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

ETC...

是否可以使用一个命令或批处理文件来做到这一点?

谢谢!

4

3 回答 3

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:\=_!"
于 2013-06-16T14:53:09.763 回答
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""
)
于 2013-06-16T13:01:51.917 回答
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
于 2013-06-16T12:30:50.793 回答