我需要通过批处理文件运行.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 /等待...... 等等。
答案 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”,因为你说这是一个单独的参数(而不是参数)。如果那些是五个单独的开关,那么应该删除那些引号。