我想在PowerShell中执行此操作:
myprogram.exe arg1 arg2 >nul 2>nul
它是如何工作的?在PowerShell中有一百万个选项来启动进程,一次不需要知道正确的进程。
答案 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
应该有用。