如何在两者之间批量重命名文件名

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 命令仅 ECHOed 用于测试目的。 确认命令正确后,将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依次赋值101190,然后变为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 选项以忽略大小写。