我有一个.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
有没有办法使用批处理文件来实现?我是新手,但解析字符串,抓取数字,将其与变量进行比较,然后替换它证明是困难的。你能指出我正确的方向吗?谢谢。
setlocal 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
)
答案 0 :(得分:4)
第一步是批量读取文件而不会无意中修改内容 这可以通过延迟切换技术来完成。
然后可以检查每一行是否以“menu”或“cmd”开头,并创建适当的菜单条目。
在每个“cmd”之后 - 递增菜单编号。
setlocal DisableDelayedExpansion
set menuNr=1
(
for /F "tokens=1,2* delims==" %%a in (myMenu.txt) do (
set "prefix=%%a"
set "rest=%%b"
call :processLine
)
) > temp.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!
(
endlocal
set "menuNr=%menuNr%"
exit /b
)