PowerShell Start-Process -redirectStandardOutput throws:系统找不到指定的文件

时间:2015-03-04 01:12:32

标签: powershell runtime-error start-process

在我执行的PowerShell窗口中:

Start-Process XXXXX.exe -ArgumentList "some valid arguments" -wait 
-redirectStandardOutput "D:\\test1.txt"

得到:

Start-Process : This command cannot be executed due to the error: The system cannot find the file specified. At line:1 char:14 + Start-Process <<<< XXXXX.exe -ArgumentList "some valid arguments here" -redirectStandardOutput "D:\\test1.txt" + CategoryInfo : InvalidOperation: (:) [Start-Process], InvalidOperationException + FullyQualifiedErrorId : InvalidOperationException,Microsoft.PowerShell.Commands.StartProcessCommand

我已经检查过启动过程是否按预期工作,如果省略-redirectStandardOutput参数(确实如此)。

test1.txt是一个新文件,而不是试图追加。

令人惊讶的是,当我运行该行时,D:\上的test1.txt文件被创建,它只是保持为空。

有谁知道这里发生了什么? 感谢。

修改

我发现如果我跑:

Start-Process XXXXX.exe -ArgumentList "some valid arguments" -wait 
-redirectStandardOutput "D:\\test1.txt"

失败(最初发布) 如果我跑:

Start-Process XXXXX.exe -ArgumentList "some valid arguments" -wait 

它工作正常,但没有将控制台输出保存到文件 如果我跑

Start-Process .\XXXXX.exe -ArgumentList "some valid arguments" -wait 
-redirectStandardOutput "D:\\test1.txt"

它的工作方式与预期相同。 那么为什么我需要在使用重定向时指定路径,但是当我不是它时,它会快乐地运行?

修改 重述问题;关于当前目录中的脚本/ exes要求允许运行./前缀的要求似乎存在一些不一致。当我不重定向输出时,不需要./。任何人都知道这是否是预期的行为?

1 个答案:

答案 0 :(得分:0)

RichyRoo,

您看到的问题很可能是因为您的XXXXX.exe位置未在PATH环境变量中注册。

如果您尝试使用在PATH环境变量内定义的文件夹之一中注册的应用程序运行命令,则该命令应该可以正常运行而不会在末尾出现。\ 即:

Start-Process cmd.exe -ArgumentList "/c ping 127.0.0.1" -redirectStandardOutput "D:\ABC\test.txt" -Wait

我尝试了使用示例批处理文件的第二个示例,如果不使用..前缀路径,它将无法正常工作-复制您的行为。

因此,通过在您的xxxxx.exe前面加上。\来限定.exe位置,它可以为您工作,因为我假设您外壳中的当前目录就是您的.exe位置。

我还没有抬起头来为什么没有在命令执行级别查看当前路径。