PowerShell启动进程重定向标准输出引发:系统找不到指定的文件

bvjxkvbb  于 2023-01-13  发布在  Shell
关注(0)|答案(1)|浏览(171)

在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需要一个./前缀才能运行的要求似乎有些不一致。2当我不重定向输出时,./是不需要的。3有人知道这是否是预期的行为吗?
bvuwiixz

bvuwiixz1#

里奇鲁
您看到的问题很可能是因为您的XXXXX.exe位置没有在PATH环境变量中注册。
如果您尝试使用在PATH环境变量中定义的某个文件夹中注册的应用程序运行命令,则该命令应在没有尾随.\ ie的情况下运行:

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

我尝试了第二个例子,使用了一个批处理文件,如果没有.\作为路径前缀,它就不能工作。
因此,它在您的端工作,通过将xxxxx.exe前缀为.\来限定您的.exe位置,因为我假设您在shell中的当前目录是您的.exe位置。
我还没有查找为什么当前路径没有在命令执行级别查看。

相关问题