我已经拥有名为“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
提前致谢
答案 0 :(得分:1)
如果满足以下条件:
_
,紧接着数字!
然后以下内容将起作用
@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.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 #: