在Windows PowerShell中重定向标准输入\输出

zsohkypk  于 12个月前  发布在  Shell
关注(0)|答案(6)|浏览(179)

在Windows PowerShell上重定向标准输入/输出所需的语法是什么?
在Unix上,我们用途:

$./program <input.txt >output.txt

字符串
如何在PowerShell中执行相同的任务?

gxwragnw

gxwragnw1#

您不能直接将文件挂接到stdin,但仍然可以访问stdin。

Get-Content input.txt | ./program > output.txt

字符串

n6lpvg4x

n6lpvg4x2#

如果有人在寻找大文件的“Get-Content”替代方案(如我),您可以在PowerShell中使用CMD:

cmd.exe /c ".\program < .\input.txt"

字符串
你也可以使用这个PowerShell命令:

Start-Process .\program.exe -RedirectStandardInput .\input.txt -NoNewWindow -Wait


它将在同一个窗口中同步运行程序。但是当我在PowerShell脚本中运行它时,我无法找到如何将此命令的结果写入变量,因为它总是将数据写入控制台。
编辑:
要从Start-Process获取输出,您可以使用选项
-RedirectStandardOutput
用于将输出重定向到文件,然后从文件中读取:

Start-Process ".\program.exe" -RedirectStandardInput ".\input.txt" -RedirectStandardOutput ".\temp.txt" -NoNewWindow -Wait
$Result = Get-Content ".\temp.txt"

guicsvcw

guicsvcw3#

对于输出重定向,您可以使用:用途:

command >  filename      Redirect command output to a file (overwrite)

  command >> filename      APPEND into a file

  command 2> filename      Redirect Errors

字符串
输入重定向以不同的方式工作。

kninwzqo

kninwzqo4#

或者你可以这样做:
例如:

$proc = Start-Process "my.exe" "exe commandline arguments" -PassThru -wait -NoNewWindow -RedirectStandardError "path to error file" -redirectstandardinput "path to a file from where input comes"

字符串
如果你想知道进程是否出错,添加以下代码:
$exitCode = $proc.get_ExitCode()

if ($exitCode){
    $errItem = Get-Item "path to error file"
    if ($errItem.length -gt 0){
        $errors = Get-Content "path to error file" | Out-String
    }
}


我发现,这样我就有一个更好的处理你的脚本执行,当你需要处理外部程序/进程.否则,我遇到的情况下,脚本会挂在一些外部进程错误.

slmsl1lt

slmsl1lt5#

你也可以这样做,让标准误差和标准输出到同一个地方(注意在cmd中,2>&1必须是 last):
get-childitem foo 2>&1 >log
请注意,“>”与“|out-file”,默认情况下编码为unicode或utf 16。使用“>>"时也要小心,因为它可能会在同一文本文件中混合使用ascode和unicode。|add-content”可能比“>>"更好用。|set-content”可能比“>"更可取。
现在有6个流。更多信息:https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_redirection?view=powershell-5.1
我认为你所能做的就是保存到一个文本文件中,然后将其读入一个变量。

hec6srdp

hec6srdp6#

我正在使用PowerShell v7.3.x,Get-Content已别名为cat。要检查您的PS,请执行Get-Command cat
由于cat感觉更像是一个shell,所以我先执行cat content,然后执行|(管道),最后执行exe,我们希望将输入重定向到exe

  • 使用absolute pathsinvoke from within dir*
PS C:\user\working-dir > cat .\input | .\program.exe

字符串
附加屏幕截图

相关问题