如何重命名BAT文件中的多个文件

时间:2013-10-26 12:17:38

标签: windows batch-file cmd

我有一个像这样的文件列表:

879061063811
879177411209
879177646578
879177927458
879177999903
879196145727
879272322985
879273522242
879273522946
879273527486
879279316113
879297532666
879373182204
879374889040
879378314075
879378411602
879603962878
879874713020

我需要的是一个自动BAT文件,它会将它们重命名为如下列表:

89061063811
89177411209
89177646578
89177927458
89177999903
89196145727
89272322985
89273522242
89273522946
89273527486
89279316113
89297532666
89373182204
89374889040
89378314075
89378411602
89603962878
89874713020

正如你所看到的,我想要的只是摆脱第二个字母“7”。我已经破了我的头,然后破解谷歌搜索很长一段时间,但没有找到答案......

据我所知,cmd没有前两个字母的通配符,这就是为什么我不限制自己使用任何cmd实用程序。我知道在Linux中它可以更容易,但cmd是我现在唯一的选择。

你将如何解决这个问题?

4 个答案:

答案 0 :(得分:0)

dir /b /a-d 87*|sed -r "/^[0-9]7[0-9]+$/s/^(.)7(.*)/echo ren \"^&\" \"\1\2\"/e"

使用sed for Windows的解决方案,删除echo以使其正常工作。

答案 1 :(得分:0)

根据需要调整正则表达式搜索字符串,以确保仅重命名正确的文件。 FOR / F在迭代之前缓冲整个命令输出,与简单的FOR不同,所以它永远不会重命名同一个文件两次。

@echo off
setlocal enableDelayedExpansion
pushd someDirectory
for /f "delims=" %%F in ('dir /b /a-d^| findstr /rx 87[0-9]*') do (
  set "name=%%a"
  ren "%%a" "!name:~0,1!!name:~2!"
)
popd

答案 2 :(得分:0)

@echo off
for /F "tokens=1* delims=7" %%a in ('dir 87* /B /A-D') do ren %%a7%%b %%a%%b

例如:

> dir /b /a-d
879061063811
879177411209
879177646578
879177927458
879177999903
MyRen.bat

>MyRen.bat

>dir /b /a-d
89061063811
89177411209
89177646578
89177927458
89177999903
MyRen.bat

如果你想在第二个位置消除几个不同的字符,只需组合它们的列表并在最后的位置使用它。例如,要消除第二个位置的数字0..7:

@echo off
for /L %%i in (0,1,7) do (
   for /F "tokens=1* delims=%%i" %%a in ('dir 8%%i* /B /A-D') do ren %%a%%i%%b %%a%%b
)

但是,在这种情况下,您应该使用move而不是ren来将重命名的文件移出目录,因此下一个周期不会再重命名它们。

答案 3 :(得分:0)

只需几个简单的步骤: -

运行CMD

粘贴要在C:\

上重命名的所有txt文件

在CMD上键入重命名命令 - REN C:\ 89 * .txt 87 * .txt

我希望这能在一分钟内解决你的问题。