Windows CMD批处理,START和输出重定向


34

我想从一个批处理文件中同时运行两个程序,并将第一个程序的输出重定向到一个文本文件中,例如:

start python 1st.py arg1 arg2 > out.txt
start 2nd.exe %1 arg2 arg3

当程序按预期运行时,所有输出都显示在stdout上。


这应该起作用。一无所知,我想知道1st.py是否对输出做一些有趣的事情。
zpletan 2011年

不,但是它写到stderr。

这就是>为什么-仅重定向标准输出(我认为)。无论如何,看起来您已经拥有了所需的东西。
zpletan 2011年

Answers:


35

您可能需要这样做:

start cmd /c python 1st.py arg1 arg2 ^> out.txt

谢谢,但是它对我不起作用(out.txt甚至不在本地目录中创建)

我用CScript和VBscript对其进行了测试,所以这个想法很合理。您是否在命令行中执行未在此处列出的“额外”操作,例如双引号?
Patrick Seymour

抱歉,出现了严重错误-可以!

@帕特里克·西摩,谢谢您的回答!没有.bat文件,我该怎么办?这不适用于cmd:python.exe ^> python_out.txt。我遇到一个错误:python.exe:无法打开文件'>':[Errno 22]无效的参数

7

重定向适用于start命令,但不适用于cmd.exe其运行的实例。

如果>操作员逃脱了,一切都应该工作:

start 1st.py arg1 arg2 ^> out.txt

(如果您也想重定向stderr,请使用2^>它。)


4
谢谢,但这对我不起作用。

5

此外,如果您想同时重定向stderr和stdout,则对我有用

开始通话delay.bat ^ 1 ^> log.txt ^ 2 ^> ^&^ 1

看来基本上每个角色都需要逃脱。该命令通常如下所示:

delay.bat 1> log.txt 2>&1


5

对我来说,技巧是将命令移到单独的批处理文件中:

rem this first batch file triggers the second one:
start the_second.bat arg1 arg2 out.txt

the_second.bat如下所示:

python 1st.py %1 %2 > %3

与正确答案相比,这是一个非常微不足道的解决方法。
DavidPostill

2
“正确答案”对我来说没有一个类似的问题,我认为这可能是人们至少想知道的解决方案。
Florian Straub

我不同意。学习正确的方法来逃避命令中的字符是一个更好的主意。
DavidPostill

请教我如何使用>>转义附加输出。
Florian Straub

我已经告诉过你。阅读接受的答案。
DavidPostill
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.