如何使用windows批处理文件脚本重命名多个文件

如何使用windows批处理文件脚本重命名多个文件,windows,batch-file,dos,Windows,Batch File,Dos,我已经并将拥有名为“x_1.txt x_2.txt x_3.txt,…”的文件。我输入这些文件的另一个程序无法识别顺序,因此它的排序类似于“x_1.txt,x_101.txt,x_2.txt”)。解决方案是将文件重命名为x00001.txt、x00002.txt等。。。。 到目前为止,我已经编写了下面的.bat文件,但我有两个问题,如果您能帮助我解决它们,我将非常高兴: 1-如何从字符串x_u'number'.txt中删除'number'.txt 2-(已解决)如何使用此字符串的变量重命名文件名

我已经并将拥有名为“x_1.txt x_2.txt x_3.txt,…”的文件。我输入这些文件的另一个程序无法识别顺序,因此它的排序类似于“x_1.txt,x_101.txt,x_2.txt”)。解决方案是将文件重命名为x00001.txt、x00002.txt等。。。。 到目前为止,我已经编写了下面的.bat文件,但我有两个问题,如果您能帮助我解决它们,我将非常高兴:

1-如何从字符串x_u'number'.txt中删除'number'.txt

2-(已解决)如何使用此字符串的变量重命名文件名(此文件的重命名部分无效!)


如果满足以下条件,请提前感谢

  • 您想重命名当前文件夹中的所有.txt文件
  • 所有的.txt文件的名称中都有一个
    ,紧跟在数字之前
  • 您的所有文件名都不包含
那么下面的方法就行了

@echo off
setlocal enableDelayedExpansion
for %%F in (*.txt) do for /f "tokens=1,2 delims=_." %%A in ("%%F") do (
  set num=0000%%B
  ren "%%F" "%%A!num:~-5!.txt"
)
但要消除这些条件,需要更复杂的代码

下面是一个健壮的解决方案,它应该正确地重命名所有符合模板的文件

  • 它允许名称中有多个
    \
  • 它仅重命名名称以
    \u NNN.txt
    结尾的文件,其中NNN是一个数字
  • 它可以正确地处理
请注意,它无法正确处理超过99999的数字。扩展0填充度很简单

@echo off
setlocal disableDelayedExpansion
pushd .
subst #: .
#:
for /f "eol=: delims=" %%F in ('dir /b /a-d *.txt^|findstr /er "_[0-9]*.txt"') do (
  set "name=%%~nF"
  setlocal enableDelayedExpansion
  for /f "eol=: delims=" %%A in ("!name:_=\x!") do (
    endlocal
    set "file=%%F"
    set "name=%%~pA"
    set "num=%%~nA"
    setlocal enableDelayedExpansion
    set "num=0000!num:~1!"
    set "name=!name:~1,-1!"
    ren "!file!" "!name:\x=_!!num:~-5!.txt"
    endlocal
  )
)
popd
subst /d #:

也许修复另一个程序会更好。:)@Golez,这我知道:),但首先批处理文件是我手头唯一的编译器!我可以用MATLAB,但是每次我想用MATLAB的时候我都要用MATLAB。第二,我记得当我还是个孩子的时候,我在DOS上安装程序,他们用批处理文件制作了一个非常好的程序,可以做任何事情。我发誓有一天我会学会的!现在是学习的时候了:DI通过在文件末尾添加对子例程的调用修复了第二个问题,我正在更新postnow,我只需要将X_u'number.txt的字符串从中拆分出来,脚本是错误的,它没有按照正确的顺序执行!:(非常感谢。我相信这个Bat文件的威力:)我理解第二个代码(J/k:-)。但是我无法在第一个代码中使用令牌,如果您有时间,您能解释一下参数%%B的设置位置吗?好的,我知道了%%B是第二个令牌
@echo off
setlocal disableDelayedExpansion
pushd .
subst #: .
#:
for /f "eol=: delims=" %%F in ('dir /b /a-d *.txt^|findstr /er "_[0-9]*.txt"') do (
  set "name=%%~nF"
  setlocal enableDelayedExpansion
  for /f "eol=: delims=" %%A in ("!name:_=\x!") do (
    endlocal
    set "file=%%F"
    set "name=%%~pA"
    set "num=%%~nA"
    setlocal enableDelayedExpansion
    set "num=0000!num:~1!"
    set "name=!name:~1,-1!"
    ren "!file!" "!name:\x=_!!num:~-5!.txt"
    endlocal
  )
)
popd
subst /d #: