批量重命名文件夹和文件

批量重命名文件夹和文件

我有一个大文件夹,其中有许多文件夹,其中包含一些文件,如下所示:

文件夹
图片 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%

通过将 改为23类似。

然后目录将更改为我们当前正在处理的目录pushd(它具有我们可以撤消随后使用 来更改此目录popd)并执行另一个循环,这次遍历目录内的文件:

for %%f in (*) do ren "%%f" "!counter!-%%f"

重命名文件并将计数器值添加到其中。计数器变量名称周围的感叹号是所谓的延迟扩张这在这里是必要的(为什么这样,可以在中读到help set)。

重命名目录中的所有文件后,我们再次跳出该目录并重命名目录本身。这里没有什么特别的。

相关内容