【问题标题】:Is it possible to use comments in Powershell multiple line commands?是否可以在 Powershell 多行命令中使用注释?
【发布时间】:2023-04-09 16:00:01
【问题描述】:

多年来,在 Powershell ISE 中调试和测试多行命令一直困扰着我。我喜欢多行命令,因为它们易于阅读,但它们使调试变得更加困难。例如,我使用以下命令来获取早于$days 的文件夹(顺便说一句,它有效)。

$dirs = Get-ChildItem $targetDir -Directory -exclude *.ps1 `
    | Where CreationTime -gt (Get-Date).AddDays(-1 * $days) `
    | Sort-Object -Property LastWriteTime

我想将AddDays 更改为AddMinutes 以测试不同的结果集,但我想保留原始行以便我可以轻松地来回切换。下面我复制了我想保留的行并将其注释掉,并在新行上将AddDays 更改为AddMinutes 添加# 会破坏多行功能。有没有一种简单的方法可以解决这个问题,我不必剪切复制的行并将其“移出”命令?或者有没有办法将命令拆分/拆分成多行?

$dirs = Get-ChildItem $targetDir -Directory -exclude *.ps1 `
#    | Where CreationTime -gt (Get-Date).AddDays(-1 * $days) `
    | Where CreationTime -gt (Get-Date).AddMinutes(-1 * $days) `
    | Sort-Object -Property LastWriteTime

(由于注释掉的行,上面不起作用)

【问题讨论】:

  • Get-Help about_Comment_Based_Help

标签: powershell powershell-ise


【解决方案1】:

您的问题是 [icky, nasty] 反引号。 [grin] powershell 知道在管道之后还有更多内容......因此,如果您将管道放在该段的末尾,则无需添加反引号正在管道中。像这样……

$dirs = Get-ChildItem $targetDir -Directory -exclude *.ps1 |
    # Where CreationTime -gt (Get-Date).AddDays(-1 * $days) |
    Where CreationTime -gt (Get-Date).AddMinutes(-1 * $days) |
    Sort-Object -Property LastWriteTime

【讨论】:

  • 你比我快 7 秒 ?
  • @LotPings - wheeeeee! [咧嘴]
  • @WhiskerBiscuit - 这有时是一次真正的试验......“多个好的回应,只有一个可以被接受”可以通过对它们都进行投票来部分解决,尽管如此。 [咧嘴]
  • 此解决方案非常特定于管道,但不适用于任何其他多线方案。 <# comment #> 是正确的解决方案
  • @mr.buttons - 是的!这个问题似乎很具体,所以我的回答很具体。 general 的答案是使用自然行延续 [逗号、左括号/括号、点符号、多行 cmets 等 ...] 而不是反引号。 [咧嘴]
【解决方案2】:

由于 powershell 期望在 |, 之后继续
作为一行中的最后一个字符,您不需要反引号和
您可以采用不同的格式,那么较长管道中的单行注释仍然有效:

$dirs = Get-ChildItem $targetDir -Directory -exclude *.ps1 |
#   Where CreationTime -gt (Get-Date).AddDays(-1 * $days) |
    Where CreationTime -gt (Get-Date).AddMinutes(-1 * $minutes) |
    Sort-Object -Property LastWriteTime

【讨论】:

  • 天哪。这些年来我们一直在做错事
【解决方案3】:

使用多行注释语法而不是#。

<# comment #> 

这应该允许您在多行命令中注释文本。

但是,这仅在您使用 Powershell 2.0 时才有效

【讨论】:

    【解决方案4】:

    试试这个,它可以作为多行注释示例包含在内

    $dirs = Get-ChildItem $targetDir -Directory -exclude *.ps1 `
    <#    | Where CreationTime -gt (Get-Date).AddDays(-1 * $days) #> ` | Where CreationTime -gt (Get-Date).AddMinutes(-1 * $days) `
        | Sort-Object -Property LastWriteTime
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-20
      • 2011-03-31
      • 2011-05-07
      • 2020-02-09
      • 2012-01-12
      • 1970-01-01
      • 2017-03-09
      • 2017-03-14
      相关资源
      最近更新 更多