使用参数通过批处理文件从exe重定向输出

时间:2017-06-11 17:46:36

标签: batch-file cmd output exe

我需要通过批处理文件运行.exe文件并将其输出重定向到文本文件。 问题是exe的路径和它获得的参数有很多空格和反斜杠,我不能让它工作。 它要么创建一个空白的txt文件,要么根本不运行我的命令(错误地解析命令)。

exe路径:C:\ Program Files(x86)\ A S \ Tools \ Image \ Image.exe
参数:
1)-v
2)C:\ Program Files(x86)\ A S \ MyFiles \ file_00_00_65
3)/ 0/1/2/3/5
4)C:\ Program Files(x86)\ A S \ MyFiles \ file_00_00_65 \ Images \ AB.dtb

我尝试了以下解决方案:

A)

    start "" "cmd /c ""C:\\Program Files (x86)\\AS\\Tools\\Image\\Image.exe" -v "C:\\Program Files (x86)\\A S\\MyFiles\\file_00_00_65" /0 /1 /2 /3 /5 "C:\\Program Files (x86)\\A S\\MyFiles\\file_00_00_65\\Images\\AB.dtb"" > Logs.txt 2>&1"

失败:找不到“C:\ Program Files(x86)\ A S \ MyFiles \ file_00_00_65 \ Images \ AB.dtb”“。

B)

    start "" cmd /c ""C:\\Program Files (x86)\\AS\\Tools\\Image\\Image.exe" -v "C:\\Program Files (x86)\\A S\\MyFiles\\file_00_00_65" /0 /1 /2 /3 /5 "C:\\Program Files (x86)\\A S\\MyFiles\\file_00_00_65\\Images\\AB.dtb"" > Logs.txt 2>&1

失败:创建一个空的txt文件。

C)

    >Logs.txt 2>&1 (
     start "" cmd /c ""C:\\Program Files (x86)\\A S\\Tools\\Image\\Image.exe" -v "C:\\Program Files (x86)\\A S\\MyFiles\\file_00_00_65" /0 /1 /2 /3 /5 "C:\\Program Files (x86)\\A S\\MyFiles\\file_00_00_65\\Images\\AB.dtb"" 
     )

它失败了:“\ A此时出乎意料。”

d)

    cmd /c ""C:\\Program Files (x86)\\A S\\Tools\\Image\\Image.exe" -v "C:\\Program Files (x86)\\A S\\MyFiles\\file_00_00_65" /0 /1 /2 /3 /5 "C:\\Program Files (x86)\\A S\\MyFiles\\file_00_00_65\\Images\\AB.dtb"" > Logs.txt | type Logs.txt

失败:创建一个空的txt文件。

我也试过开始/ B /等待...... 等等。

2 个答案:

答案 0 :(得分:2)

批处理文件中的命令行如何?

"%ProgramFiles(x86)%\A S\Tools\Image\Image.exe" -v "%ProgramFiles(x86)%\A S\MyFiles\file_00_00_65" /0 /1 /2 /3 /5 "%ProgramFiles(x86)%\A S\MyFiles\file_00_00_65\Images\AB.dtb" >"%USERPROFILE%\Desktop\Logs.txt" 2>&1

在批处理文件中,不得使用另一个反斜杠转义反斜杠字符。这仅在许多编程和脚本语言中是必需的,而不是在批处理文件中。

命令 START 在新的命令进程中运行控制台应用程序。

命令 CMD 也会启动一个新的命令进程。

但批处理文件已在命令进程中运行。

所以我真的不明白当前所写的内容为什么要使它比必要的更复杂,另外还要使用命令 START CMD

使用该命令行在桌面上创建文件Logs.txt,以便在批处理文件或快捷方式文件(* .lnk)中使用。

当然,应用程序Image.exe必须是一个控制台应用程序,编写其输出以处理 STDOUT ,并将其错误处理为 STDERR ,以便将其重定向到文件{ {1}}。无法从命令行将Windows GUI应用程序的输出重定向到文件。

答案 1 :(得分:0)

如果您愿意等待程序完成,不确定为什么要打扰启动或cmd。如果仅仅是争论传递混乱,那么沿着这条线应该有用:

set a1="C:\Program Files (x86)\A S\MyFiles\file_00_00_65" "/0 /1 /2 /3 /5"
set a2="C:\Program Files (x86)\A S\MyFiles\file_00_00_65\Images\AB.dtb"
"C:\Program Files (x86)\A S\Tools\Image\Image.exe" %a1% %a2% >Logs.txt 2>&1

在这里使用环境变量 a1 a2 只是为了管理行长度,因此无需滚动即可显示 - 您可以删除它们并将其全部删除如果你愿意,可以一行。

我引用了“/ 0/1/2/3/5”,因为你说这是一个单独的参数(而不是参数)。如果那些是五个单独的开关,那么应该删除那些引号。