0

我已经并且将拥有名为“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_'number'.txt 中删除 'number'.txt

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

cls
setlocal enabledelayedexpansion
set /A count=100000
for %%f in (*.txt) do (
   set /a count+=1
   set str=!count:~1!
   echo !str!
   echo %%f
   set filename=%%f
   set filename=!filename:~0,5! /Comment: here I want to just keep the x_ part which I don't know how"
   echo !filename!
   set str3=!filname!!str! 
   echo !str3!
   /// ren %%f !str3!.txt  /Comment: Here I cannot use the variable str3,
   call:renamer %%f !str3!
 )

 :renamer
 ren %1 %2.txt

提前致谢

4

1 回答 1

1

如果满足以下条件:

  • 您想重命名当前文件夹中的所有 .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"
)

但是要消除这些条件需要更复杂的代码。

这是一个强大的解决方案,应该正确重命名符合模板的所有文件。

  • 它允许_名称中有多个。
  • 它只重命名名称以_NNN.txtNNN 是数字结尾的文件
  • 它正确处理!文件名。

请注意,它不会正确处理超过 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 #:
于 2012-12-14T18:00:27.313 回答