【问题标题】:get variable's value in if conditional Batch Script在条件批处理脚本中获取变量的值
【发布时间】:2014-02-19 14:48:29
【问题描述】:

我有一个批处理脚本会做这些事情:

  1. 列出所有 MAC
  2. 检查当前文件夹是否有像“blah-blah-[MAC].xml”这样的XML文件
  3. 如果是 --> 执行 setup.exe 并将该 XML 文件作为参数传递(XML 文件位于文件夹名称“config”中)

这是我的批处理脚本:

for /F  "usebackq tokens=12 delims= "  %%i IN (`ipconfig /all ^| find /i "physical address"`) DO if exist *%%i.xml (setup.exe /file:config\*%%i.xml)

问题是,当我使用通配符“*%%i.xml”时,我无法获取 if 条件中的值。

-> 在这种情况下,如何将匹配的“*%%i.xml”XML 文件传递​​给 setup.exe?

【问题讨论】:

  • 您看到了什么错误?如果你的 setup.exe 不接受这样的通配符,那么你需要一个额外的循环来解析每个文件名。
  • 当我像这样通过 *%%i.xml 时,我的 setup.exe 说 *MAC.xml,但不是 blah-blah-MAC.xml(我想要 blah-blah-MAC.xml)

标签: batch-file for-loop token wildcard


【解决方案1】:

如果我将 tokens=12 更改为 tokens=10(德语 Windows),您的代码对我有用。

但是呢:

@echo off
setlocal enabledelayedexpansion
for /F  "usebackq tokens=2 delims=:" %%i IN (`ipconfig /all ^| findstr "..-..-..-"`) DO ( 
    set file=*%%i.xml
    set file=!file: =!
    for %%a in (!file!) do echo %%a
)

它以: 作为分隔符。唯一的“问题”是有一个领先的空间,但这很容易解决。 (字符串“物理地址”在其他语言中的长度会发生变化,因此如果用空格分隔,标记的数量会有所不同)

for %%a 行是 foxidrive 建议的额外循环。

注意:将find /i "physical address" 替换为findstr "..-..-..-" 使其与语言无关。

【讨论】:

  • 谢谢,顺便说一句,我不能在我的环境中使用 findstr。 “物理地址”是可以的。您能否使用我的代码的“For 语句”(保留令牌、分隔符、使用“查找 /i”和“物理地址”)来修复代码。我试过但卡在“设置文件=!文件:=!”
猜你喜欢
  • 2011-02-10
  • 1970-01-01
  • 1970-01-01
  • 2012-01-26
  • 2011-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多