启动进程,等待它,并丢弃所有输出

时间:2016-06-14 10:44:53

标签: powershell

我想在PowerShell中执行此操作:

myprogram.exe arg1 arg2 >nul 2>nul

它是如何工作的?在PowerShell中有一百万个选项来启动进程,一次不需要知道正确的进程。

1 个答案:

答案 0 :(得分:3)

nul是一种特殊设备(例如,参见SuperUser上的this answer),它在CMD中可用,但在PowerShell中不可用。在PowerShell中,您可以使用$null代替。从PowerShell v3开始,您可以使用*>重定向所有output streams,但由于您要从外部程序重定向输出,因此只应在STDOUT和STDERR上输出(PowerShell中的成功和错误输出流),所以>$null 2>$null应该没问题。

CMD和PowerShell之间的一个显着区别是PowerShell不包含PATH中的当前工作目录(当您调用没有路径的程序/脚本时搜索的目录列表)。如果要从当前目录运行myprogram.exe,则需要在其前面添加当前目录的路径(./)。

您可能还想使用call operator&)。虽然在这种特殊情况下不需要,但我认为使用它是一种很好的做法。如果将命令指定为字符串(例如,因为路径或文件名包含空格,或者您想使用变量而不是文字),则必须使用调用运算符,否则语句将引发错误。

像这样的东西

& ./myprogram.exe arg1 arg2 >$null 2>$null

或者像这样

& ./myprogram.exe arg1 arg2 *>$null

应该有用。