【问题标题】:Windows batch script - comparing strings in if statementWindows 批处理脚本 - 比较 if 语句中的字符串
【发布时间】:2020-08-07 07:31:37
【问题描述】:

我正在尝试编写一个 Windows 批处理脚本,它检查 XML 文件(iml 文件)以搜索特定行,.我在字符串中的空格遇到问题。有没有办法逃脱或补偿空间?

for /f "tokens=*" %%a in (abcd.iml) do (
    echo %%a
    if %%a==^<orderEntry type="inheritedJdk" ^> (echo 'FOUND')
 )

【问题讨论】:

标签: windows batch-file


【解决方案1】:

将 %%a 放在引号中,使其类似于“%%a”。与其使用“==”运算符来比较 %%a 和“^”,不如使用 EQU 比较器,这样最终代码如下所示:

for /f "tokens=*" %%a in (abcd.iml) do (
    echo %%a
    if "%%a" EQU "<orderEntry type="inheritedJdk" >" (echo 'FOUND')
 )

有关 EQU 和其他运算符的更多信息,请参阅 https://ss64.com/nt/if.htmlhttps://ss64.com/nt/equ.html

【讨论】:

  • Neko Musume,我认为你应该阅读 Sqashman 的开场评论,以及 my comment,因为目前,(尽管你已经收到了赞成票)你的答案没有按预期工作。
  • 哦,你是说回声上的分线键吗?抱歉,我从来没有真正理解如何使用它,但我可以编辑答案并添加它。
  • 请阅读cmets!很明显,如果你有机会自己测试一下。对任何文件进行测试并不需要太多时间,相应地重命名并在一行上插入所需的字符串&lt;orderEntry type="inheritedJdk" &gt;
  • 它已经对我有用,我已经测试过了,所以我不知道你在说什么错误
【解决方案2】:

不需要for 循环。一个简单的findstr 更快:

 findstr /c:"<orderEntry type=\"inheritedJdk\" >" "abcd.iml" >nul && echo found || echo nope

注意:字符串中的引号必须转义(findstr 的转义字符是反斜杠)

【讨论】:

  • “findstr”不是更好地搜索文件中的文本吗?
  • @NekoMusume findstr 较新且有更多选项,但 find 非常适合某些任务,因此更新并不总是更好。但在这种情况下你是对的。字符串中的引号必须被转义。 Find 无法做到这一点(我之前的 find 解决方案只是“偶然”运行良好(仅对 &lt;orderEntry type= 感到满意,而忽略了其余的))。改为findstr
猜你喜欢
  • 2013-07-19
  • 2016-07-17
  • 1970-01-01
  • 2017-12-06
  • 2014-10-09
  • 2012-05-11
  • 1970-01-01
  • 1970-01-01
  • 2014-08-19
相关资源
最近更新 更多