繁体   English   中英

“-”在Powershell中起什么作用

[英]What does “-” do in Powershell

我是PowerShell的新手,但我仍在尝试了解语法。 在这样的命令中

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

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

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

CMDLet名称

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

参数

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

运营商

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

-LiteralPath是使用-的含义。 这是给参数的。

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

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

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

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

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

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

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

希望对您有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM