【发布时间】:2017-12-07 12:17:10
【问题描述】:
我是 powershell 新手,我仍在尝试理解语法。 在这样的命令中
Get-ChildItem *.txt | Rename-Item -NewName { $_.name -Replace '\.txt$','.log' }
- 实际上是做什么的?
有时它在那里,有时不在那里,我只是不明白它有什么目的xD
【问题讨论】:
标签: powershell syntax
我是 powershell 新手,我仍在尝试理解语法。 在这样的命令中
Get-ChildItem *.txt | Rename-Item -NewName { $_.name -Replace '\.txt$','.log' }
- 实际上是做什么的?
有时它在那里,有时不在那里,我只是不明白它有什么目的xD
【问题讨论】:
标签: powershell syntax
PowerShell 中的连字符具有多种特定于上下文的用途。它主要用于 cmdlet 名称、参数、运算符,当然也用作字符文字。
它通常用作动词-名词分隔符,例如Get-ChildItem。在制作自定义函数和 cmdlet 时,这是一种鼓励的做法。
用于告诉解析器一个词表示一个参数,例如Rename-Item -NewName。在示例中为-NewName
这是一个宽泛的部分,但您会在代码示例中看到连字符表示运算符,如 -replace。它并不总是与算术运算符 (-) 和赋值运算符 (-=) 相关联的关键字。您还将看到带有比较、包含、模式匹配/文本和逻辑/位运算符的连字符。
【讨论】:
在 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' }
希望对您有所帮助。
【讨论】:
-LiteralPath 使用- 是什么意思。这是用于参数的。
在您的示例中,-NewName 被视为参数,-Replace 是运算符
编辑:正如彼得正确指出的那样;修改答案
【讨论】: