メニューとコマンドのリストを含む .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
)