如何在中间批量重命名文件名

时间:2015-03-23 04:08:16

标签: batch-file rename

这分为3部分,由Magoo提供以下3个优秀答案。

第1部分;

这些是示例文件名;

丹·威廉姆斯x12c17福特野马
cindy stan x11c17 lexus rsx
rachel x x09c17 yamaha hayabusa 2008

----我需要删除C17

之后的所有字符

第2部分;

这些是示例文件名;

dan williams x12c01 ford野马
cindy stan x11c17 lexus rsx
rachel x x09c90 yamaha hayabusa 2008

----我需要删除C**之后的所有字符。其中C17可以是C01-C90之间的任何字符。


第3部分;

使用这些扩展文件名;

dan williams x12c01 newyork ford mustang.xlsx
cindy stan x11c17 lexus newyork rsx.xlsx
rachel x x09c90 yamaha hayabusa 2008 newyork.xlsx

----我需要删除C**之后的所有内容,如第2部分所示,同时保留单词newyork并将其放在文件的末尾,并保留文件扩展名。

思想?

2 个答案:

答案 0 :(得分:2)

@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在您确认命令正确后,将ECHO(REN更改为REN以实际重命名文件。

获取包含c17的目录中的所有文件名,用冒号替换c17,在冒号前选择该部分,并将原始文件名重命名为所选部分+ c17 < / p>


@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。< / p>

从那里!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并保留修订后的扩展名。

如果您想在城市名称前面留一个空格,请在=

set city...之后插入一个空格

答案 1 :(得分:2)

我通常使用我的JREN.BAT regluar expression rename utility进行复杂的重命名操作 - 它比编写自定义批处理脚本简单得多,而且性能更好。 JREN.BAT是一个混合JScript /批处理脚本,可以在XP以后的任何Windows机器上本机运行。

我将所有实用程序放在“c:\ utils”文件夹中,并在我的PATH中包含该文件夹。

关于你对Magoo的评论,我假设如果你有一个c99的文件名,那么你也想重命名它。如果是这样,那么您需要以下一个衬垫:

jren "(c\d\d).*" $1

如果您希望忽略大小写,请添加/I选项。

jren "(c\d\d).*" $1 /i

使用jren /?可获得完整文档。您可能希望使用jren /? | more一次查看一页帮助。但我配置一个大缓冲区我的控制台窗口,所以我可以向上滚动查看过去的输出,我不需要使用更多。

修改

我会进行一次编辑以处理您修改后的要求。之后,您可以学习正则表达式和JREN.BAT可用的选项。

jren "(.*?c\d\d).*(newyork).*(\.xlsx)$" "$1 $2$3"

再次添加/I选项以忽略大小写。