使用start命令从cmd文件进行输出重定向是否可行?

7
我希望有一个类似以下内容的cmd文件:
:one
start /wait (blabla1.exe -q -m 1>blabla1.log 2>&1)

:two
start /wait (blabla2.exe -q -m 1>blabla2.log 2>&1)

我希望得到blabla应用程序的输出,而不是start命令的输出。

启动命令中是否可以使用“本地”重定向?

我是否需要创建一个只包含一行代码的cmd:
blabla1.exe -q -m 1>blabla1.log 2>&1
并将其传递给start命令?

更新:在启动第二个应用程序(blabla2.exe)之前,我需要先完成第一个应用程序(blabla1.exe)。这就是使用start /wait的原因。

(适用于Windows XP及更高版本)

4个回答

22

使用/start wait命令并带有/B选项,可以重定向输出。

start /B /wait myprog.exe >> output.log
如果你需要中断,你将需要使用 Ctrl+BreakCtrl+C将被忽略。希望这可以帮助你。

5
考虑到你正在将输出重定向到文件,并等待进程完成,那么“start”启动的额外窗口是否真的必要?实际上,如果在使用“start”时有一种重定向输出的方法,那么弹出的窗口甚至不会有任何输出...这使它们变得更加毫无意义。
如果不需要,只需删除“start /wait”并直接调用exes即可。
如果确实需要...那我就不确定了。
更新:我相当确定仅删除“start /wait”将产生您所需的行为。请参见以下内容:
(创建以下批处理文件:foo.cmd)
:one
notepad.exe
:two
dir

请注意,在关闭记事本之前,dir 命令不会显示结果。

我需要第二个在第一个完成后开始。所以我想我需要/wait。 - Francesca
@Francois - 对的 - 在批处理文件中,如果你不使用start,批处理文件在cmd/exe完成之前不会继续到下一行。只有当你使用start时,才需要/wait等待第一个退出。以下是示例批处理脚本以说明问题。 - Joshua McKinnon
你说得对,我一开始就不需要 start,那么我也不需要 /wait。只要没有它,它就能按照我的意图工作了。谢谢!{为什么要简单做事,当你可以把它搞复杂呢!叹气;-)} - Francesca

1

你需要转义 > 字符以便在启动命令中被正确解析

start /B /wait myprog.exe ^>^> output.log

0

翻译该帖原始示例代码,我的解决方案如下:

:one
start /wait cmd.exe "/c blabla1.exe -q -m 1>blabla1.log 2>&1"

:two
start /wait cmd.exe "/c blabla2.exe -q -m 1>blabla2.log 2>&1"

这些引号会导致程序启动时重定向执行,而不是直接由启动命令执行。

背景: 我遇到了类似的问题,因此发现了这个问题。虽然原帖不需要使用"start /wait",并且可以省略该部分而不会遇到重定向的麻烦,但我的问题是我需要使用"start",并且需要一种方法来将进程的输出重定向到文件中。

因此,使用"start /B"是一种解决方案,但我发现在我的cmd脚本(这是我的域用户登录脚本)中使用"start /B"会防止它在结束时终止。控制台窗口只是挂在那里,而不是消失。因此,我必须想出一个新的解决方案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接