-2

我正在尝试跳过行以便在此 findstr 命令下方的第二行中获取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 (上面)找到它的字符串的第二行中获取var5 。

所以我决定在 for 循环中为跳过创建一个变量。我称之为“ skipnumber5 ”。但是,使用此变量会跳过我所说的行数,但不会重复循环。因此,如果我设置 skipnumber5=12,它的作用与“skip=12”不同。它正确地执行了第一个循环,但随后它一次又一次地重复第一个循环结果。使用 skip=12 确实可以在循环中正常工作,但是我需要更改跳过值才能在var5更改时获取它。

代码:设置 /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的skip停留在同一个文件中,正在跳过。但是,如果您阅读代码,它应该更改为下一个Filename5,跳过。如果 skip=1 或任何整数,这就是它的工作原理。

那么为什么变量skipnumber5使skip= 以这种方式运行呢?

4

1 回答 1

0

findstr 的一个示例,没有延迟扩展:

@echo off &setlocal
set "search=mysearch"
set "file=file.txt"

:: find first %search%
set "count="
for /f "tokens=1*delims=:" %%i in ('findstr /n "%search%" %file%') do if not defined count set /a count=%%i
echo pattern:  [%search%] found at line %count%
:: two lines down --> skip+1
set /a count+=1
set "variable="
set "found="
:: grab line+2
for /f "skip=%count%tokens=1*delims=:" %%i in ('findstr /n "^" %file%') do if not defined found set "found=%%i"&set "variable=%%j"
:: Note: you need %found% to find empty lines
echo variable: [%variable%] found at line %found%
endlocal

对于您的问题:您不能使用 !variable! 或 for 循环变量作为for parameter代码块中的(delims、skip 等),在同一代码块中更改其值。

于 2013-03-22T21:37:07.217 回答