批量循环访问命令结果(命令位于其他文件夹中)



我正在尝试使用 FOR/F 循环访问命令的结果。

要实际运行的命令 - C:\Program Files\my folder\command.exe

%installdir% 是 C:\Program Files\my folder\

我运行的代码是 -

FOR /F "delims=, tokens=1,2" %%c in (results.txt) DO (
  if %%d EQU [something] (
    FOR /F "delims=: skip=2" %%e in ('%installdir%command.exe /checkstatus Client %%c') do (
      echo %%e %%f
    )
  )
)

我猜这没有正常运行,因为我需要以某种方式使用 usebackq,但我还没有设法这样做。感谢对此的任何帮助!

FOR /F "delims=: skip=2" %%e in ('"%installdir%command.exe" /checkstatus ....
                                  ^         quotes        ^

如果您的命令包含空格,则需要将其括起来。

这样做的问题是,同时启动处理要执行的命令的cmd实例会删除一些双引号(我们添加的引号),最后我们得到一个新错误(有关更多信息,请参阅cmd /?

要解决它,您需要添加...更多报价。

FOR /F "delims=: skip=2" %%e in ('""%installdir%command.exe" /checkstatus ... "') do ....
        quoted executable          ^.......................^ 
        quoted full command       ^...........................................^

您将需要usebackq何时

  • 您运行的命令中需要单引号,因此使用反引号将命令括起来
  • 您正在读取文件,需要使用双引号,因为它包含空格/特殊字符。双引号字符串作为直接字符串进行处理,需要usebackq来指示它是文件名。

如果您执行for /?,您可以看到指示的两种情况

最新更新