不能在findstr中使用变量?

凯列拉

我有一个使用查找字符串在日志中搜索某个字符串的for循环,但是它无法正常工作。即使日志中没有这样的痕迹,它也会执行错误级别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 %errorlevel%==0 (
    Echo Memory Error at MapException: Key '%%x'!
)
)
pause

我想知道这是怎么回事?

MC ND
@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!因此,在块解析时,变量读取不会被变量值替换。块内变量的更改在块内可见。

或者,在这种情况下,由于涉及的变量是errorlevel,请使用经典if形式来检查其值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

不能在 jquery 函数中使用变量

不能在JS中使用PHP变量

不能在Makefile中使用变量

我不能在createFormBuilder中使用变量

不能在函数中使用变量

不能在AMPL中使用小数变量

不能在嵌套的for循环中使用特定变量?

不能在Go中使用“ go”作为变量名

$ document_root变量不能在“ root”指令中使用

不能在Rails的集成测试中使用会话变量

全局变量不能在Angular.foreach中使用

(Python 3.6)不能在模块中使用变量

不能在会话变量 express 中使用“Set”

不能在php文件而不是css中使用变量

为什么不能在函数中使用这些变量?

在函数外部定义的变量不能在函数中使用?

我不能在 jinja 的 if 语句中使用变量

在安全表达式变量中使用变量(不能在 security() 中使用可变变量)

我不能在 SQL 查询中使用变量 Msg 137 必须声明标量变量

不能在另一个非参数变量中使用参数变量

为什么这个变量不是全局变量(不能在函数中使用)?

为什么不能在会话变量中使用字符串数字作为索引?

Powershell变量可以正确显示,但是不能在数学运算中使用?

C++ 不能在用作成员变量的对象中使用成员

为什么不能在__init__关键字arg中使用类变量?

不能在变量声明中使用 make(IntChannel)(IntChannel 类型的值)作为 Consumer 值

为什么最终变量不能在switch语句中使用?

为什么不能在地图文字中使用变量作为键?

为什么不能在if块中使用以if条件初始化的变量?