2014-04-03 121 views
64

似乎%操作在管道後啓動腳本塊,儘管about_Script_Blocks指示%不是必需的。「%」(百分比)在PowerShell中做什麼?

這些都工作得很好。

get-childitem | %{ write-host $_.Name } 

{ write-host 'hello' } 

%{ write-host 'hello' } 

但是當我們在管道後面添加一個腳本塊時,我們需要首先得到%。

get-childitem | { write-host $_.Name } 
+2

你試過搜索「powershell per分號「 – PeeHaa

+0

@PeeHaa這樣做了。謝謝! –

+10

您可能也試過Get-Help% – mjolinor

回答

94

當在小命令(例如,你的例子)的上下文中使用,它是ForEach-Object別名:

> Get-Alias -Definition ForEach-Object 

CommandType  Name            Definition 
-----------  ----            ---------- 
Alias   %             ForEach-Object 
Alias   foreach            ForEach-Object 

當在方程式的上下文中使用,這是modulus operator

> 11 % 5 

1 

和作爲模數運算符,%也可以在一個assignment operator%=)中使用:

+1

我會將它標記爲答案,一旦它也包含作爲模運算符的%角色在不同的上下文中。 –

+1

添加公式和賦值運算符示例 – Kohlbrr

+4

對於Foreach-Object,我建議不要使用「%」符號 - 這會讓人們難以閱讀/維護代碼 - 特別是新來PS的人。讓我們面對現實吧,選擇PS的人越多越好。 –

0

%,可替代Get-ChildItem |ForEach-Object{ write-host $_.Name },它不能沒有%ForEach-Object

+0

此答案不會增加現有答案的價值。 –

3

賽後PowerShell - Special Characters And Tokens
提供了多個符號,包括%的描述去

% (percentage) 
1. Shortcut to foreach. 
Task: Print all items in a collection. 
Solution. 
... | % { Write-Host $_ } 
2. Remainder of division, same as Mod in VB. 
Example: 
5 % 2 
+0

此答案不會增加兩個現有答案的價值。 –

+1

@ShaunLuttin:該值是一個鏈接,它描述了多個特殊字符,包括% –