【问题标题】:What does "-" do in PowershellPowershell中的“-”有什么作用
【发布时间】:2017-12-07 12:17:10
【问题描述】:

我是 powershell 新手,我仍在尝试理解语法。 在这样的命令中

Get-ChildItem *.txt | Rename-Item -NewName { $_.name -Replace '\.txt$','.log' }

- 实际上是做什么的? 有时它在那里,有时不在那里,我只是不明白它有什么目的xD

【问题讨论】:

    标签: powershell syntax


    【解决方案1】:

    PowerShell 中的连字符具有多种特定于上下文的用途。它主要用于 cmdlet 名称、参数、运算符,当然也用作字符文字。

    CMDLet 名称

    它通常用作动词-名词分隔符,例如Get-ChildItem。在制作自定义函数和 cmdlet 时,这是一种鼓励的做法。

    参数

    用于告诉解析器一个词表示一个参数,例如Rename-Item -NewName。在示例中为-NewName

    运营商

    这是一个宽泛的部分,但您会在代码示例中看到连字符表示运算符,如 -replace。它并不总是与算术运算符 (-) 和赋值运算符 (-=) 相关联的关键字。您还将看到带有比较、包含、模式匹配/文本和逻辑/位运算符的连字符。

    【讨论】:

      【解决方案2】:

      在 Powershell 中,特定 cmdlet 的所有参数都已定义为以“-”开头。它表示参数用于相应的 cmdlet。

      所有的 cmdlet 都是用 Csharp 或 Powershell 函数编写的函数,它们定义了传递参数参数的方式,例如:

      Get-ChildItem *.txt | Rename-Item -NewName { $_.name -Replace '\.txt$','.log' }
      

      Get-Childitem 是具有 -include 参数且值为 **.txt* 的 cmdlet。因此,即使您没有给出参数名称,powershell 也可以通过本机识别某些参数值。 所以这就是它没有问题的原因。

      类似地,当您将第一个 cmdlet 的输出通过管道传输到第二个(即 Rename-item)时,它有一个参数 -NewName,其值已作为整个输出传递{$_.name -替换 '.txt$','.log' }

      希望对您有所帮助。

      【讨论】:

        【解决方案3】:

        -LiteralPath 使用- 是什么意思。这是用于参数的。

        在您的示例中,-NewName 被视为参数,-Replace 是运算符

        编辑:正如彼得正确指出的那样;修改答案

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-01-02
          • 2011-06-24
          • 1970-01-01
          • 2010-12-31
          • 2020-06-25
          • 2014-05-15
          • 2012-05-24
          相关资源
          最近更新 更多