Що робить "%" (відсоток) у PowerShell?


106

Здається, що операція% запускає блоки сценаріїв після конвеєра, хоча about_Script_Blocks вказує, що% не потрібен.

Вони працюють добре.

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

{ write-host 'hello' }

% { write-host 'hello' }

Але коли ми додаємо блок скриптів після конвеєра, нам потрібно мати%%.

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

2
Ви спробували шукати "знак відсотка"
PeeHaa

17
Можливо, ви також спробували отримати допомогу%
mjolinor

7
@mjolinor Це корисно. Я не знав, що можу отримати допомогу щодо символів. Я бачу, що ми також можемо шукати $ _ за допомогою get-help. Це чудово!
Шон Люттін

1
Це також оператор модуля! просто не в цьому контексті
Cole9350

41
@PeeHaa Ваша пропозиція веде сюди.
NiloCK

Відповіді:


144

Якщо використовується в контексті командлету (наприклад, у вашому прикладі), це псевдонім для ForEach-Object:

> Get-Alias -Definition ForEach-Object

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

При використанні в контексті рівняння це оператор модуля :

> 11 % 5

1

і як оператор модуля %також може використовуватися в операторі призначення ( %=):

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

1

2
Я позначу це як відповідь, коли він також містить% роль як оператора модуля в різних контекстах.
Шон Люттін

1
Додано приклади рівнянь та операторів присвоєння
Кольбрр

17
Що стосується Foreach-Object, я б радив не використовувати символ "%" - людям це важче читати / підтримувати ваш код - особливо людям, які не знайомі з PS. Давайте зіткнемося з цим, чим більше людей, які підбирають PS, тим краще.
Саймон Кетлін

1
Де я можу знайти значення ForEach-Object в офіційній документації на MSDN?
праворуч

Я не погоджуюся з Саймоном Кетліном, за цією логікою всі ми повинні використовувати збірку, оскільки решта - це лише синтаксичний цукор
reggaeguitar

16

Пост PowerShell - Спеціальні символи та жетони містить опис декількох символів, у тому числі%

% (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: Значення - це посилання, яке описує кілька спеціальних символів, включаючи%
Michael Freidgeim

Технічно це псевдонім для ForEach-Object. ForEachтакож псевдонім для ForEach-Object- за винятком випадків, коли він використовується на початку оператора, де це ключове слово управління циклом (наприклад while).
mwfearnley

4

%може замінити те, що не буде працювати без того або .Get-ChildItem | ForEach-Object { write-host $_.Name }%ForEach-Object

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.