2012-05-08 74 views
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 

有没有一种方法可以使用批处理文件来实现这一点?我对此很陌生,但是解析字符串,获取数字,将它与变量进行比较,然后替换它就证明是困难的。你能指出我正确的方向吗?谢谢。

SOLUTION
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 
) 

回答

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 
) 
+0

该问题的优秀分析。注意:我会在结尾放一个:end和一个暂停,以使批处理文件在运行后可读。 – djangofan

+0

这真的是一个很好的分析。我做了一些小改动,将改变写入temp .txt文件并重写原始文件,但除此之外它是惊人的。谢谢! – Stoating

+0

@Zachary Stade - 你在for循环中更好地重定向它,它更快,而且如果'temp.txt'已经存在,你没有问题。我将它添加到我的示例中 – jeb

相关问题