我是PowerShell的新手,我还在尝试理解语法。 在像这样的命令
Get-ChildItem *.txt | Rename-Item -NewName { $_.name -Replace '\.txt$','.log' }
-
实际上做了什么?
有时它存在,有时不存在,我只是不明白它有什么目的xD
答案 0 :(得分:3)
PowerShell中的连字符具有各种特定于上下文的用法。它主要用于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'}
希望它对你有所帮助。