在Windows PowerShell上重定向标准输入/输出所需的语法是什么?在Unix上,我们用途:
$./program <input.txt >output.txt
字符串如何在PowerShell中执行相同的任务?
gxwragnw1#
您不能直接将文件挂接到stdin,但仍然可以访问stdin。
Get-Content input.txt | ./program > output.txt
字符串
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"
型
guicsvcw3#
对于输出重定向,您可以使用:用途:
command > filename Redirect command output to a file (overwrite) command >> filename APPEND into a file command 2> filename Redirect Errors
字符串输入重定向以不同的方式工作。
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 } }
型我发现,这样我就有一个更好的处理你的脚本执行,当你需要处理外部程序/进程.否则,我遇到的情况下,脚本会挂在一些外部进程错误.
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我认为你所能做的就是保存到一个文本文件中,然后将其读入一个变量。
hec6srdp6#
我正在使用PowerShell v7.3.x,Get-Content已别名为cat。要检查您的PS,请执行Get-Command cat由于cat感觉更像是一个shell,所以我先执行cat content,然后执行|(管道),最后执行exe,我们希望将输入重定向到exe。
Get-Content
cat
Get-Command cat
cat content
|
exe
absolute paths
invoke from within dir
PS C:\user\working-dir > cat .\input | .\program.exe
字符串附加屏幕截图
6条答案
按热度按时间gxwragnw1#
您不能直接将文件挂接到stdin,但仍然可以访问stdin。
字符串
n6lpvg4x2#
如果有人在寻找大文件的“Get-Content”替代方案(如我),您可以在PowerShell中使用CMD:
字符串
你也可以使用这个PowerShell命令:
型
它将在同一个窗口中同步运行程序。但是当我在PowerShell脚本中运行它时,我无法找到如何将此命令的结果写入变量,因为它总是将数据写入控制台。
编辑:
要从Start-Process获取输出,您可以使用选项
-RedirectStandardOutput
用于将输出重定向到文件,然后从文件中读取:
型
guicsvcw3#
对于输出重定向,您可以使用:用途:
字符串
输入重定向以不同的方式工作。
kninwzqo4#
或者你可以这样做:
例如:
字符串
如果你想知道进程是否出错,添加以下代码:
$exitCode = $proc.get_ExitCode()
型
我发现,这样我就有一个更好的处理你的脚本执行,当你需要处理外部程序/进程.否则,我遇到的情况下,脚本会挂在一些外部进程错误.
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
我认为你所能做的就是保存到一个文本文件中,然后将其读入一个变量。
hec6srdp6#
我正在使用PowerShell v7.3.x,
Get-Content
已别名为cat
。要检查您的PS,请执行Get-Command cat
由于
cat
感觉更像是一个shell,所以我先执行cat content
,然后执行|
(管道),最后执行exe
,我们希望将输入重定向到exe
。absolute paths
或invoke from within dir
*字符串
附加屏幕截图