递归重命名子文件夹Windows批处理文件中的文件

时间:2014-07-27 04:58:16

标签: windows batch-file recursion filenames rename

我在名为C:\ Images的父文件夹下的子文件夹中有大量文件。

所有文件都有一个长度完全相同的前缀模式,3个字符,即" [数字] [数字] - "

01-filename.jpg
55-filename.jpg
82-filename.jpg

我已经研究了如何通过在每个子文件夹中运行批处理文件来从文件名中去除前缀​​,但是我想运行一个批处理文件,这些文件将从父文件夹开始并递归地逐步遍历每个子文件夹并重命名/去除前缀关闭每个文件名。

以下代码不起作用:-(任何帮助都会很棒: - )

setlocal enabledelayedexpansion
for /r "c:\images\" %%f in (*.jpg) do (
pushd 
set filename=%%f
set filename=!filename:~3!
rename "%%f" "!filename!"
popd
)

1 个答案:

答案 0 :(得分:1)

您应该将不包含第二个参数路径的文件名传递给rename

@echo off
setlocal enabledelayedexpansion
for /r "c:\images\" %%f in (*.jpg) do (
    set filename=%%~nxf
    set filename=!filename:~3!
    rename "%%f" "!filename!"
)

%%~nxI同时提供文件名和扩展名。

检查文件是否真的需要重命名也是一个非常好的主意:

@echo off
setlocal enabledelayedexpansion
for /r "c:\images\" %%f in (*.jpg) do (
    set filename=%%~nxf
    if "!filename:~2,1!" == "-" (
        set filename=!filename:~3!
        rename "%%f" "!filename!"
    )
)

最后考虑添加一条消息:

@echo off
setlocal enabledelayedexpansion
for /r "c:\images\" %%f in (*.jpg) do (
    set filename=%%~nxf
    if "!filename:~2,1!" == "-" (
        set filename=!filename:~3!
        echo Renaming %%f to !filename!.
        rename "%%f" "!filename!"
    ) else (
        echo Skipping file %%f.
    )
)

你不需要pushdpopd