Powershell中“ - ”做了什么

时间:2017-12-07 12:17:11

标签: powershell syntax

我是PowerShell的新手,我还在尝试理解语法。 在像这样的命令

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

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

3 个答案:

答案 0 :(得分:3)

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

CMDLet名称

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

参数

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

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

答案 1 :(得分:1)

-LiteralPath是使用-的含义。它适用于参数。

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

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

答案 2 :(得分:1)

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

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

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

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

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

希望它对你有所帮助。