Loops Can';findstr中的变量是否不使用?
我有一个for循环,使用findstring搜索日志中的某个字符串,但它不能正常工作。它在errorlevel 0中执行所有操作,即使日志中没有这样的跟踪Loops Can';findstr中的变量是否不使用?,loops,batch-file,for-loop,findstr,Loops,Batch File,For Loop,Findstr,我有一个for循环,使用findstring搜索日志中的某个字符串,但它不能正常工作。它在errorlevel 0中执行所有操作,即使日志中没有这样的跟踪 @Echo on for /L %%x in (1, 1, 1000) do ( findstr /N /I /C:"MapException: Key '%%x'" "C:\Program Files (x86)\Steam\SteamApps\common\Starbound\starbound_server.log" if %erro
@Echo on
for /L %%x in (1, 1, 1000) do (
findstr /N /I /C:"MapException: Key '%%x'" "C:\Program Files (x86)\Steam\SteamApps\common\Starbound\starbound_server.log"
if %errorlevel%==0 (
Echo Memory Error at MapException: Key '%%x'!
)
)
pause
我想知道这是怎么回事
@Echo on
for /L %%x in (1, 1, 1000) do (
findstr /N /I /C:"MapException: Key '%%x'" "C:\Program Files (x86)\Steam\SteamApps\common\Starbound\starbound_server.log"
if not errorlevel 1 (
Echo Memory Error at MapException: Key '%%x'!
)
)
pause
为什么??好吧,试试这两行
(( echo hi | find "k" ) & echo %errorlevel% )
(( echo hi | find "k" ) & if errorlevel 1 echo not found )
“问题”是块内变量的扩展(括号内的行)。当执行到达块时,块开始执行之前,块内的所有变量读取都将替换为变量的值。当块执行时,变量可以更改其值,但在块内部看不到这些更改,因为它们已被其值替换
如何解决
启用延迟扩展并使用sintax!错误等级代码>。因此,在块解析时,变量读取不会被变量值替换。块内变量的更改在块内可见
或者,在这种情况下,由于涉及的变量是errorlevel
,请使用经典的if
形式检查其值。我不知道!非常感谢你的帮助。