如何在两者之间批量重命名文件名
How to batch rename file names inbetween
这分为 3 个部分,导致 Magoo 在下面给出了 3 个出色的答案。
第 1 部分;
这些是示例文件名;
丹·威廉姆斯 x12c17 福特野马
辛迪斯坦 x11c17 雷克萨斯 rsx
瑞秋 x x09c17 雅马哈隼鸟 2008
----我需要删除C17
之后的所有字符
第 2 部分;
这些是示例文件名;
丹·威廉姆斯 x12c01 福特野马
辛迪斯坦 x11c17 雷克萨斯 rsx
瑞秋 x x09c90 雅马哈隼鸟 2008
---- 我需要删除 C**
之后的所有字符,其中 C17 可以是 C01-C90 之间的任何字符。
第 3 部分;
使用这些扩展文件名;
dan williams x12c01 newyork ford mustang.xlsx
辛迪·斯坦 x11c17 雷克萨斯纽约 rsx.xlsx
瑞秋 x x09c90 雅马哈隼鸟 2008 newyork.xlsx
---- 我需要像第 2 部分一样删除 C**
之后的所有内容,同时还保留单词 newyork
并将其放在文件末尾,并保留文件扩展名。
想法?
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "sourcedir=U:\sourcedir\t w o"
PUSHD "%sourcedir%"
FOR /f "delims=" %%a IN ('dir /b /a-d "*c17*" ') DO (
SET "filename=%%a"
SET "filename=!filename:c17=:!"
FOR /f "tokens=1delims=:" %%r IN ("!filename!") DO echo(REN "%%a" "%%rC17"
)
popd
GOTO :EOF
您需要更改 sourcedir
的设置以适合您的情况。
所需的 REN 命令仅 ECHO
ed 用于测试目的。 确认命令正确后,将ECHO(REN
更改为REN
以实际重命名文件。
获取包含c17
目录下的所有文件名,将c17
替换为冒号,select冒号前的部分,将原文件名重命名为[=50] =]ed+c17
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "sourcedir=U:\sourcedir\t w o"
PUSHD "%sourcedir%"
FOR /L %%v IN (101,1,190) DO (
SET /a cnum=%%v
SET "cnum=c!cnum:~-2!"
IF EXIST "*!cnum!*" (
FOR /f "delims=" %%a IN ('dir /b /a-d "*!cnum!*" ') DO (
SET "filename=%%a"
CALL SET "filename=%%filename:!cnum!=:%%"
FOR /f "tokens=1delims=:" %%r IN ("!filename!") DO ECHO(REN "%%a" "%%r!cnum!"
)
)
)
popd
GOTO :EOF
修改以允许改变 cnumber。 cnum
依次赋值101
到190
,然后变为c
+最后2位,所以c01
..c90
.
从头到尾用 !cnum!
代替 c17
,但使用 call set
构造来替换文件名。
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "sourcedir=U:\sourcedir\t w o"
PUSHD "%sourcedir%"
FOR /L %%v IN (101,1,190) DO (
SET /a cnum=%%v
SET "cnum=c!cnum:~-2!"
IF EXIST "*!cnum!*" (
FOR /f "delims=" %%a IN ('dir /b /a-d "*!cnum!*" ') DO (
SET "city="
FOR %%n IN (newyork) DO ECHO %%a|FIND /i "%%n" >NUL & IF NOT ERRORLEVEL 1 SET "city=%%n"
SET "filename=%%a"
CALL SET "filename=%%filename:!cnum!=:%%"
FOR /f "tokens=1delims=:" %%r IN ("!filename!") DO ECHO(REN "%%a" "%%r!cnum!!city!%%~xa"
)
)
)
popd
GOTO :EOF
现在将插入 newyork
并保留修改后的扩展名。
如果要在城市名称前添加 space,请将其插入 set city...
中的 =
之后
我通常使用我的 JREN.BAT regluar expression rename utility 进行复杂的重命名操作 - 它比编写自定义批处理脚本简单得多,而且性能更好。 JREN.BAT 是一个混合 JScript/batch 脚本,可以在任何 Windows XP 以后的机器上本地运行。
我将所有实用程序放在 "c:\utils" 文件夹中,并将该文件夹包含在我的 PATH 中。
关于您对 Magoo 的评论,我假设如果您有一个带有 c99 的文件名,那么您也想重命名它。如果是这样,那么您只需要以下一个衬垫:
jren "(c\d\d).*"
如果您希望它忽略大小写,请添加 /I
选项。
jren "(c\d\d).*" /i
使用 jren /?
可以获得完整的文档。您可能希望使用 jren /? | more
一次查看一页帮助。但是我为我的控制台 window 配置了一个大缓冲区,所以我可以向上滚动查看过去的输出,我不需要使用更多。
编辑
我将进行一次编辑来处理您修改后的要求。之后,您需要学习正则表达式和 JREN.BAT.
可用的选项
jren "(.*?c\d\d).*(newyork).*(\.xlsx)$" " "
同样,添加 /I
选项以忽略大小写。
这分为 3 个部分,导致 Magoo 在下面给出了 3 个出色的答案。
第 1 部分;
这些是示例文件名;
丹·威廉姆斯 x12c17 福特野马
辛迪斯坦 x11c17 雷克萨斯 rsx
瑞秋 x x09c17 雅马哈隼鸟 2008
----我需要删除C17
第 2 部分;
这些是示例文件名;
丹·威廉姆斯 x12c01 福特野马
辛迪斯坦 x11c17 雷克萨斯 rsx
瑞秋 x x09c90 雅马哈隼鸟 2008
---- 我需要删除 C**
之后的所有字符,其中 C17 可以是 C01-C90 之间的任何字符。
第 3 部分;
使用这些扩展文件名;
dan williams x12c01 newyork ford mustang.xlsx
辛迪·斯坦 x11c17 雷克萨斯纽约 rsx.xlsx
瑞秋 x x09c90 雅马哈隼鸟 2008 newyork.xlsx
---- 我需要像第 2 部分一样删除 C**
之后的所有内容,同时还保留单词 newyork
并将其放在文件末尾,并保留文件扩展名。
想法?
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "sourcedir=U:\sourcedir\t w o"
PUSHD "%sourcedir%"
FOR /f "delims=" %%a IN ('dir /b /a-d "*c17*" ') DO (
SET "filename=%%a"
SET "filename=!filename:c17=:!"
FOR /f "tokens=1delims=:" %%r IN ("!filename!") DO echo(REN "%%a" "%%rC17"
)
popd
GOTO :EOF
您需要更改 sourcedir
的设置以适合您的情况。
所需的 REN 命令仅 ECHO
ed 用于测试目的。 确认命令正确后,将ECHO(REN
更改为REN
以实际重命名文件。
获取包含c17
目录下的所有文件名,将c17
替换为冒号,select冒号前的部分,将原文件名重命名为[=50] =]ed+c17
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "sourcedir=U:\sourcedir\t w o"
PUSHD "%sourcedir%"
FOR /L %%v IN (101,1,190) DO (
SET /a cnum=%%v
SET "cnum=c!cnum:~-2!"
IF EXIST "*!cnum!*" (
FOR /f "delims=" %%a IN ('dir /b /a-d "*!cnum!*" ') DO (
SET "filename=%%a"
CALL SET "filename=%%filename:!cnum!=:%%"
FOR /f "tokens=1delims=:" %%r IN ("!filename!") DO ECHO(REN "%%a" "%%r!cnum!"
)
)
)
popd
GOTO :EOF
修改以允许改变 cnumber。 cnum
依次赋值101
到190
,然后变为c
+最后2位,所以c01
..c90
.
从头到尾用 !cnum!
代替 c17
,但使用 call set
构造来替换文件名。
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "sourcedir=U:\sourcedir\t w o"
PUSHD "%sourcedir%"
FOR /L %%v IN (101,1,190) DO (
SET /a cnum=%%v
SET "cnum=c!cnum:~-2!"
IF EXIST "*!cnum!*" (
FOR /f "delims=" %%a IN ('dir /b /a-d "*!cnum!*" ') DO (
SET "city="
FOR %%n IN (newyork) DO ECHO %%a|FIND /i "%%n" >NUL & IF NOT ERRORLEVEL 1 SET "city=%%n"
SET "filename=%%a"
CALL SET "filename=%%filename:!cnum!=:%%"
FOR /f "tokens=1delims=:" %%r IN ("!filename!") DO ECHO(REN "%%a" "%%r!cnum!!city!%%~xa"
)
)
)
popd
GOTO :EOF
现在将插入 newyork
并保留修改后的扩展名。
如果要在城市名称前添加 space,请将其插入 set city...
=
之后
我通常使用我的 JREN.BAT regluar expression rename utility 进行复杂的重命名操作 - 它比编写自定义批处理脚本简单得多,而且性能更好。 JREN.BAT 是一个混合 JScript/batch 脚本,可以在任何 Windows XP 以后的机器上本地运行。
我将所有实用程序放在 "c:\utils" 文件夹中,并将该文件夹包含在我的 PATH 中。
关于您对 Magoo 的评论,我假设如果您有一个带有 c99 的文件名,那么您也想重命名它。如果是这样,那么您只需要以下一个衬垫:
jren "(c\d\d).*"
如果您希望它忽略大小写,请添加 /I
选项。
jren "(c\d\d).*" /i
使用 jren /?
可以获得完整的文档。您可能希望使用 jren /? | more
一次查看一页帮助。但是我为我的控制台 window 配置了一个大缓冲区,所以我可以向上滚动查看过去的输出,我不需要使用更多。
编辑
我将进行一次编辑来处理您修改后的要求。之后,您需要学习正则表达式和 JREN.BAT.
可用的选项jren "(.*?c\d\d).*(newyork).*(\.xlsx)$" " "
同样,添加 /I
选项以忽略大小写。