2
我有一个.txt文件,其中包含菜单和命令列表。我希望能够做的是通过这个.txt文件的每一行增量运行,检查数字,并从前一个值中增加它。所以,这里是该文件的一个示例部分:批处理:重新排序文本文件中的数字
menu1=do something
cmd1=cd \\somewhere
menu2=do something
cmd2=cd \\somewhere
menu3=do something
cmd3=cd \\somewhere
menu1=do something
cmd1=cd \\somewhere
menu2=do something
cmd2=cd \\somewhere
menu3=do something
cmd3=cd \\somewhere
通知菜单编号从1到3如何计算,然后恢复到1再次中途。
不幸的是,他们需要像下面一样继续递增。
menu1=do something
cmd1=cd \\somewhere
menu2=do something
cmd2=cd \\somewhere
menu3=do something
cmd3=cd \\somewhere
menu4=do something
cmd4=cd \\somewhere
menu5=do something
cmd5=cd \\somewhere
menu6=do something
cmd6=cd \\somewhere
有没有一种方法可以使用批处理文件来实现这一点?我对此很陌生,但是解析字符串,获取数字,将它与变量进行比较,然后替换它就证明是困难的。你能指出我正确的方向吗?谢谢。
SOLUTIONsetlocal DisableDelayedExpansion
set menuNr=1
(
for /F "tokens=1,2* delims==" %%a in (MyFile.txt) do (
set "prefix=%%a"
set "rest=%%b"
call :processLine
)
)
move /y temp.txt MyFile.txt
exit /b
:processLine
setlocal EnableDelayedExpansion
if "!prefix:~0,4!"=="menu" (
set "prefix=menu!menuNr!"
)
if "!prefix:~0,3!"=="cmd" (
set "prefix=cmd!menuNr!"
set /a menuNr+=1
)
echo !prefix!=!rest! >> temp.txt
(
endlocal
set "menuNr=%menuNr%"
exit /b
)
该问题的优秀分析。注意:我会在结尾放一个:end和一个暂停,以使批处理文件在运行后可读。 – djangofan
这真的是一个很好的分析。我做了一些小改动,将改变写入temp .txt文件并重写原始文件,但除此之外它是惊人的。谢谢! – Stoating
@Zachary Stade - 你在for循环中更好地重定向它,它更快,而且如果'temp.txt'已经存在,你没有问题。我将它添加到我的示例中 – jeb