PowerShell命令是否可以使用多行参数

iswrvxsc  于 2023-01-05  发布在  Shell
关注(0)|答案(1)|浏览(160)

我想从powershell窗口运行以下命令。

My-Command1 -f “firstline
secondline
thirdline”

我希望能够为-f参数复制和粘贴一堆行--这可以做到吗?
我试过复制和粘贴,但不起作用。

xqk2d5yq

xqk2d5yq1#

是的,您*可以 * 使用和粘贴多行参数,但必须以string literals * 形式提供 *,即 * 带有分隔符 *(引号)-请参阅下面关于粘贴多行 * 命令 * 的章节。

    • 重要信息**:
      • 在 * Windows * 上,* 如果 * 使用Ctrl-V粘贴**,而不是 * 右键单击 *,则可以简化下面的解决方案,方法是在前面 * 键入 * 两个 * 开始分隔符和结束分隔符,然后在粘贴之前将光标 * 放在它们之间 *。
  • 由于GitHub issue #579中讨论的原因,这在以下情况下 * 不 * 起作用,因为这些粘贴方法使用 * 模拟类型 *:
  • 在 * Windows * 上,如果使用 * 右键单击 *。
  • 在类似 * Unix * 的平台上,截至本文撰写之时,* 总是 *(不过,bracketed pasting将来可能会提供解决方案)。

最简单的情况下,键入 * 开始 * 分隔符(",或者,对于 * literal * 内容,最好是'),然后粘贴您的多行值,再键入 * 结束 * 分隔符;例如:

Write-Output '  # <- paste here, then type ' to close the string
    • 如果你粘贴的值有可能包含你用来分隔字符串的相同的引号字符,请使用here-string**;例如:
Write-Output @' # <- Press ENTER, then paste, 
                # then press ENTER again, then type '@ to close the here-string

如果您发现自己需要 * 频繁*粘贴多行值,则可以设置自定义PSReadLine键处理程序,如下所示:

# Define keyboard shortcut Alt-V to paste the current clipboard
# content as a verbatim here-string.
Set-PSReadLineKeyHandler 'alt+v' -ScriptBlock {
  [Microsoft.PowerShell.PSConsoleReadLine]::Insert("@'`n`n'@")
  foreach ($i in 1..3) { [Microsoft.PowerShell.PSConsoleReadLine]::BackwardChar() }
  [Microsoft.PowerShell.PSConsoleReadLine]::Insert((Get-Clipboard -Raw))
  foreach ($i in 1..3) { [Microsoft.PowerShell.PSConsoleReadLine]::ForwardChar() }
}

然后可以使用Alt-V将剪贴板上当前的(多行)文本作为逐字的here-string粘贴(根据需要自定义键盘快捷键)。

    • 粘贴多行PowerShell * 命令*/代码片段

从上文可以得出:

  • 在Windows上,使用Ctrl-V,您可以随意粘贴任意(但完整的)代码片段并执行它们。
  • 在类Unix平台上(以及在Windows上使用右键单击时),如果没有bracketed pasting,代码片段可能会被粘贴为 * 多个 * 命令,这 * 可能会中断 *:
  • 只要粘贴文本中包含的语句 * 本身 * 是完整的语句,则提交该语句。
  • 一个值得注意的陷阱是,如果if语句的else分支被放置在 * 其自己的行 * 上,则if分支被认为是完整的语句并且首先提交,从而在随后提交else分支时导致语法错误;例如:
# Pasting this currently malfunctions, except on 
# Windows with Ctrl-V
if ($true) {
  'yup'
}
else {
  'nah'
}

相关问题