获取控制台输出并在批处理文件中打印sametime

时间:2015-04-20 08:07:15

标签: windows batch-file

我想打印控制台输出并同时获取。 我尝试使用下面的代码来获取和打印结果,但它不起作用。 我怎么能这样做?

代码:

  set myvar="C:\Program Files (x86)\Inno Setup 5\iscc.exe" asd.iss /SSign_PATH="%cd%\DigitalSign\signtool.exe sign $p"
  for /f "delims=" %%i in ('%myvar%') DO (
  echo %%i
  set OUTPATH=%%i )

结果:

'C:\Program' is not recognized as an internal or external command,
operable program or batch file.

1 个答案:

答案 0 :(得分:0)

您的错误消息来自FOR / F命令。

解决方案:对FOR / F声明的小改动

for /f "delims=" %%i in ('^"%myvar%^"') DO (

<强>解释

通过FOR /F .... IN ('command') DO ...之类的命令执行命令时,命令在新的cmd.exe进程中通过如下命令执行:

C:\Windows\system32\cmd.exe /c command

由于空格,您的命令需要在可执行路径周围引用。所以你的命令,如目前所写,变成:

C:\Windows\system32\cmd.exe /c "C:\Program Files (x86)\Inno Setup 5\iscc.exe" asd.iss /SSign_PATH="%cd%\DigitalSign\signtool.exe sign $p"

但CMD.EXE有一个不幸的设计,如果命令的第一个字符是引号,那么它通常会在执行命令字符串之前删除最外面的引号。所以命令变为

C:\Program Files (x86)\Inno Setup 5\iscc.exe" asd.iss /SSign_PATH="%cd%\DigitalSign\signtool.exe sign $p

查看上述内容,您应该能够了解收到错误消息的原因。

解决方案是在整个命令周围添加一组额外的引号,这些引号将被剥离。您希望命令看起来像:

C:\Windows\system32\cmd.exe /c ""C:\Program Files (x86)\Inno Setup 5\iscc.exe" asd.iss /SSign_PATH="%cd%\DigitalSign\signtool.exe sign $p""

但是你不想要额外的引号来抛弃批处理解析器,因此它们应该在IN()子句中进行转义。