2012-05-08 46 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

相關問題