我有一个大文件夹,其中有许多文件夹,其中包含一些文件,如下所示:
文件夹 图片 08-21 - 日本.jpg; - 德语.jpg; - 伦敦.jpg; 图片 08-22 - 加勒比语.jpg - 马耳他.jpg IMSS 08-23 - 中心.jpg -圆圈.jpg -自行车.jpg
我想通过批处理(.bat 或适用于 winXP cmd 的任何文件)重命名为
文件夹 01-图片 08-21 - 01-日本.jpg - 01-德语.jpg - 01-伦敦.jpg 02-图片 08-22 - 02-加勒比.jpg - 02-马耳他.jpg 03-ims 08-23 - 03-中心.jpg -03-圆圈.jpg - 03-自行车.jpg
我想将文件夹重命名为前缀(数字)-文件夹,将文件(文件夹中)重命名为前缀(文件夹)-文件。有人能帮我吗?
答案1
以下批处理文件应该可以解决这个问题。解释如下。
@echo off
setlocal enableextensions enabledelayedexpansion
set counter=0
for /d %%d in (*) do (
set /a counter+=1
call :lz
pushd %%d
for %%f in (*) do ren "%%f" "!counter!-%%f"
popd
ren "%%d" "!counter!-%%d"
)
endlocal
goto :eof
:lz
set counter=000%counter%
rem adapt this to allow for three-digit numbering
set counter=%counter:~-2%
goto :eof
基本上这个循环遍历所有目录
for /d %%d in (*)
此处的开关/d
仅用于循环遍历目录。循环中的当前目录存储在 中%%d
。然后计数器(开始时设置为 0)增加一,并在必要时在开始时用零适当填充。这是通过调用:lz
子例程完成的。在该子例程中(它位于批处理的末尾),可以在行中更改位数
set counter=%counter:~-2%
通过将 改为2
或3
类似。
然后目录将更改为我们当前正在处理的目录pushd
(它具有我们可以撤消随后使用 来更改此目录popd
)并执行另一个循环,这次遍历目录内的文件:
for %%f in (*) do ren "%%f" "!counter!-%%f"
重命名文件并将计数器值添加到其中。计数器变量名称周围的感叹号是所谓的延迟扩张这在这里是必要的(为什么这样,可以在中读到help set
)。
重命名目录中的所有文件后,我们再次跳出该目录并重命名目录本身。这里没有什么特别的。