Co robi „%” (percent) w PowerShell?


106

Wygląda na to, że operacja% uruchamia bloki skryptu po potoku, chociaż about_Script_Blocks wskazuje, że% nie jest potrzebny.

To wszystko działa dobrze.

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

{ write-host 'hello' }

% { write-host 'hello' }

Ale kiedy dodajemy blok skryptu po potoku, najpierw musimy mieć%.

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

2
Czy próbowałeś wyszukać „znak procentu powershell”
PeeHaa

17
Mogłeś także wypróbować Get-Help%
mjolinor

7
@mjolinor To przydatne. Nie wiedziałem, że mogę uzyskać pomoc dotyczącą symboli. Widzę, że możemy również wyszukać $ _ za pomocą get-help. To wspaniale!
Shaun Luttin

1
To także operator modułu! po prostu nie w tym kontekście
Cole9350

41
@PeeHaa Twoja sugestia prowadzi tutaj.
NiloCK

Odpowiedzi:


144

W przypadku użycia w kontekście polecenia cmdlet (takiego jak w przykładzie) jest to alias dla ForEach-Object:

> Get-Alias -Definition ForEach-Object

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

W przypadku użycia w kontekście równania jest to operator modułu :

> 11 % 5

1

a jako operator modułu %może być również używany w operatorze przypisania ( %=):

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

1

2
Oznaczę to jako odpowiedź, gdy będzie zawierało również rolę% jako operatora modułu w różnych kontekstach.
Shaun Luttin

1
Dodano przykłady równań i operatorów przypisania
Kohlbrr,

17
W przypadku Foreach-Object radziłbym nie używać symbolu „%” - utrudnia to ludziom odczytywanie / utrzymywanie twojego kodu - zwłaszcza osobom nowym w PS. Spójrzmy prawdzie w oczy, im więcej osób odbiera PS, tym lepiej.
Simon Catlin

1
Gdzie mogę znaleźć znaczenie ForEach-Object w oficjalnej dokumentacji w witrynie MSDN?
rightfold

Nie zgadzam się z Simonem Catlinem, zgodnie z tą logiką wszyscy powinniśmy używać asemblera, ponieważ reszta to tylko cukier składniowy
reggaeguitar

16

Post PowerShell - znaki specjalne i tokeny zawiera opis wielu symboli, w tym%

% (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
@ShaunLuttin: Wartością jest link, który opisuje wiele znaków specjalnych, w tym%
Michael Freidgeim

Technicznie jest to alias dla ForEach-Object. ForEachjest także aliasem for ForEach-Object- z wyjątkiem sytuacji, gdy jest używany na początku instrukcji, gdzie jest to słowo kluczowe kontroli pętli (jak while).
mwfearnley

4

%można zastąpić, które nie będą działać bez rozszerzenia lub .Get-ChildItem | ForEach-Object { write-host $_.Name }%ForEach-Object

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.