【发布时间】:2019-07-25 06:40:35
【问题描述】:
我想从 批处理文件 中静默执行 executable 及其参数,而不在控制台上从可执行文件打印任何内容,并且不应从执行该可执行文件另一个控制台(它不应该打开另一个命令提示符来执行)。为此,我尝试使用 start 命令如下,但无法执行。
start "C:\myApp.exe -mode='a' -inputFilePath='%filePath%'" -i silent
其中 %filePath% 是一个变量,-mode,-inputFilePath 是我的可执行文件的参数。
请纠正我上述声明中的任何错误并帮助我解决这个问题。谢谢!
【问题讨论】:
-
试试
start "title" "C:\myApp.exe" -mode="a" -inputFilePath="%filePath%" -i silent。参数中第一个带引号的字符串被视为窗口标题(例如,对于控制台窗口)。它可以是空的"",但为了清楚起见,我将它设为"title"。引用是否支持单引号取决于应用程序(即“myApp.exe”),但通常单引号只是 Windows 中的文字字符,所以我改用双引号。使用双引号也会转义 CMD 中的特殊字符,%除外。 -
感谢@eryksun,但这会在运行可执行文件时打开另一个命令提示符,请建议我避免在批处理文件执行提示符或单独的命令提示符窗口中打印可执行输出的方法
-
但这很有效,对吧?重要的是要分层解决这样的问题,而不是试图一次性解决所有问题。
-
为什么命令
start用于将可执行文件作为与cmd.exe处理批处理文件并行的单独进程运行?使用"C:\myApp.exe" -mode=a -inputFilePath="%filePath%" -i silent >nul 2>&1,可执行文件由cmd.exe执行,无需再打开一个控制台窗口,并通过将它们重定向到设备STDOUT和STDERR >NUL。可执行文件完成后,cmd.exe继续处理批处理文件。 -
@Mofi,通常我会添加
<nul来重定向标准输入,以防程序读取输入。如果我们不需要等待并将返回码设置为%errorlevel%,我会使用start和/B选项来防止分配新的控制台:start "" /B "C:\myApp.exe" -mode="a" -inputFilePath="%filePath%" -i silent <nul >nul 2>&1
标签: windows batch-file parameters command-prompt executable