我有很多具有以下结构的文件:
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
等...
是否可以使用一个命令或批处理文件执行此操作?
谢谢!
答案 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""
)