在 Windows PowerShell 上重定向标准输入/输出所需的语法是什么?
在 Unix 上,我们使用:
$./program <input.txt >output.txt
如何在 PowerShell 中执行相同的任务?
在 Windows PowerShell 上重定向标准输入/输出所需的语法是什么?
在 Unix 上,我们使用:
$./program <input.txt >output.txt
如何在 PowerShell 中执行相同的任务?
您不能将文件直接挂接到标准输入,但您仍然可以访问标准输入。
Get-Content input.txt | ./program > output.txt
如果有人在寻找大文件的“获取内容”替代方案(如我),您可以在 PowerShell 中使用 CMD:
cmd.exe /c ".\program < .\input.txt"
或者你可以使用这个 PowerShell 命令:
Start-Process .\program.exe -RedirectStandardInput .\input.txt -NoNewWindow -Wait
它将在同一窗口中同步运行程序。但是当我在 PowerShell 脚本中运行它时,我无法找到如何将这个命令的结果写入变量,因为它总是将数据写入控制台。
编辑:
要从 Start-Process 获取输出,您可以使用选项
-重定向标准输出
用于将输出重定向到文件,然后从文件中读取:
Start-Process ".\program.exe" -RedirectStandardInput ".\input.txt" -RedirectStandardOutput ".\temp.txt" -NoNewWindow -Wait
$Result = Get-Content ".\temp.txt"
对于输出重定向,您可以使用:
command > filename Redirect command output to a file (overwrite)
command >> filename APPEND into a file
command 2> filename Redirect Errors
输入重定向以不同的方式工作。例如看到这个 Cmdlet http://technet.microsoft.com/en-us/library/ee176843.aspx
或者你可以这样做:
就像是:
$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
}
}
当您需要处理外部程序/进程时,我发现这样我确实可以更好地处理脚本的执行。否则,我遇到了脚本会因某些外部进程错误而挂起的情况。
您也可以这样做以使标准错误和标准输出到同一个地方:
获取子项 foo 2>&1 >log
请注意,“>”与“| out-file”相同,默认编码为 unicode 或 utf 16。还要小心“>>”,因为它可以在同一个文本文件中混合 ascii 和 unicode。"| add-content" 可能比 ">>" 效果更好。“| set-content”可能比“>”更可取。
我认为您所能做的就是保存到文本文件,然后将其读入变量。