Was macht "%" (Prozent) in PowerShell?


106

Es scheint, dass die Operation% Skriptblöcke nach der Pipeline startet, obwohl about_Script_Blocks angibt, dass% nicht erforderlich ist.

Diese funktionieren alle einwandfrei.

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

{ write-host 'hello' }

% { write-host 'hello' }

Wenn wir jedoch nach der Pipeline einen Skriptblock hinzufügen, müssen wir zuerst% haben.

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

2
Haben Sie versucht, "Powershell Prozent Zeichen"
— PeeHaa

17
Sie könnten auch Get-Help%
— mjolinor

7
@mjolinor Das ist nützlich. Ich wusste nicht, dass ich Hilfe bei Symbolen bekommen könnte. Ich sehe, dass wir auch $ _ mit Hilfe abrufen können. Das ist großartig!
— Shaun Luttin

1
Es ist auch ein Moduloperator! nur nicht in diesem Zusammenhang
— Cole9350

41
@PeeHaa Dein Vorschlag führt hierher.
— NiloCK

Antworten:


144

Bei Verwendung im Kontext eines Cmdlets (wie in Ihrem Beispiel) ist es ein Alias ​​für ForEach-Object:

> Get-Alias -Definition ForEach-Object

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

Wenn es im Kontext einer Gleichung verwendet wird, ist es der Moduloperator :

> 11 % 5

1

und kann als Moduloperator %auch in einem Zuweisungsoperator ( %=) verwendet werden:

> $this = 11
> $this %= 5
> $this

1

2
Ich werde dies als Antwort markieren, sobald es auch die% -Rolle als Moduloperator in verschiedenen Kontexten enthält.
— Shaun Luttin

1
Beispiele für Gleichungs- und Zuweisungsoperatoren
— hinzugefügt

17
Im Fall von Foreach-Object würde ich raten, das "%" -Symbol nicht zu verwenden - es erschwert es den Leuten, Ihren Code zu lesen / zu pflegen - insbesondere den PS-Neulingen. Seien wir ehrlich, je mehr Leute PS abholen, desto besser.
— Simon Catlin

1
Wo finde ich die ForEach-Object-Bedeutung in der offiziellen Dokumentation zu MSDN?
— Rechtsfalte

Ich bin nicht einverstanden mit Simon Catlin, nach dieser Logik sollten wir alle Assembly verwenden, da der Rest nur syntaktischer Zucker ist
— Reggaeguitar

16

Ein Beitrag PowerShell - Sonderzeichen und Token enthält eine Beschreibung mehrerer Symbole, einschließlich%

% (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

7
@ ShununLuttin: Der Wert ist ein Link, der mehrere Sonderzeichen beschreibt, einschließlich%
— Michael Freidgeim

Technisch ist es ein Alias ​​für ForEach-Object. ForEachist auch ein Alias ​​für ForEach-Object- außer wenn es am Anfang einer Anweisung verwendet wird, bei der es sich um ein Schleifensteuerungsschlüsselwort handelt (wie while).
— mwfearnley

4

%kann ersetzen, was ohne die oder die nicht funktioniert .Get-ChildItem | ForEach-Object { write-host $_.Name }%ForEach-Object

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.