この findstr コマンドの下の 2 行目にあるvar5を取得するために、行をスキップしようとしています。
'findstr /x /v /c:"Ship sunk" "C:\Users\P Ditty\Documents\SH3\data\cfg\Backups_SCR2\!FileName5!.clg" "C:\Users\P Ditty\Documents\SH3\data\cfg\Backups_SCR2\!FileName5!.cfg"')
繰り返しますが、findstr (上記) がその文字列を見つけた場所の下の 2 行目からvar5を取得したいと思います。
そこで、for ループでスキップ用の変数を作成することにしました。私はそれを「skipnumber5」と呼びました。ただし、この変数を使用すると、私が言う行の量をスキップしますが、ループは繰り返されません。したがって、skipnumber5=12 を設定すると、「skip=12」と同じように動作しません。最初のループは正しく実行されますが、最初のループ結果が何度も繰り返されます。skip=12 を使用すると、ループで正しく機能しますが、var5が変更されたときにそれを取得するには、skip 値を変更する必要があります。
コード: set /a skipnumber5=0
:part5
set /a skipnumber5+=12
set /a maxlines5+=1
set /a linecount5=0
for /F "delims=" %%x in ('findstr /c:"Ship sunk" "C:\Users\P Ditty\Documents\SH3\data\cfg\Backups_SCR2\*.clg" "C:\Users\P Ditty\Documents\SH3\data\cfg\Backups_SCR2\Log_*.cfg"') do (
set /a linecount5+=1
set FileName5=
set FileName5=%%~nx
if !linecount5! GEQ %maxlines5% goto part5a
)
:part5a
set /a maxlines5a+=1
set /a linecount5a=0
for /f "skip=%skipnumber5% tokens=2 delims==" %%E in ('findstr /x /v /c:"Ship sunk" "C:\Users\P Ditty\Documents\SH3\data\cfg\Backups_SCR2\!FileName5!.clg" "C:\Users\P Ditty\Documents\SH3\data\cfg\Backups_SCR2\!FileName5!.cfg"') do (
set /a linecount5a+=1
set var5=
set var5=!var5!%%E
set /a skipnumber5+=12
if !linecount5a! GEQ %maxlines5a% (goto part5b)
)
for ループ オプションで、変数skipnumber5を含む問題の行は次のとおりです。
for /f "skip=%skipnumber5% tokens=2 delims==" %%E in
問題は、変数skipnumber5のスキップが同じファイルにとどまり、スキップしていることです。しかし、コードを読むと、スキップして次のFilename5に変更されるはずです。これが、skip=1 または任意の整数の場合の動作です。
では、変数skipnumber5が skip= をこのように動作させるのはなぜでしょうか?