1

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

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

4 回答 4

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将重命名的文件移出目录,因此接下来的循环不会再次重命名它们。

于 2013-10-26T18:18:48.477 回答
0
dir /b /a-d 87*|sed -r "/^[0-9]7[0-9]+$/s/^(.)7(.*)/echo ren \"^&\" \"\1\2\"/e"

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

于 2013-10-26T13:03:02.227 回答
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
于 2013-10-26T13:15:37.180 回答
0

只需几个简单的步骤即可: -

运行 CMD

将要重命名的所有 txt 文件粘贴到 C:\

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

我希望这会在一分钟内解决您的问题。

于 2014-03-10T15:44:28.510 回答