¿Qué hace "%" (porcentaje) en PowerShell?


106

Parece que la operación% inicia bloques de script después de la canalización, aunque about_Script_Blocks indica que% no es necesario.

Todo esto funciona bien.

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

{ write-host 'hello' }

% { write-host 'hello' }

Pero cuando agregamos un bloque de secuencia de comandos después de la canalización, primero debemos tener%.

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

2
¿Ha intentado buscar "signo de porcentaje de
— PowerShell

17
También puede haber probado Get-Help%
— mjolinor

7
@mjolinor Eso es útil. No sabía que podía obtener ayuda con los símbolos. Veo que también podemos buscar $ _ con get-help. ¡Eso es genial!
— Shaun Luttin

1
¡También es un operador de módulo! simplemente no en este contexto
— Cole9350

41
@PeeHaa Tu sugerencia lleva aquí.
— NiloCK

Respuestas:


144

Cuando se usa en el contexto de un cmdlet (como su ejemplo), es un alias para ForEach-Object:

> Get-Alias -Definition ForEach-Object

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

Cuando se usa en el contexto de una ecuación, es el operador de módulo :

> 11 % 5

1

y como operador de módulo, %también se puede usar en un operador de asignación ( %=):

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

1

2
Marcaré esto como respuesta una vez que también contenga el rol% como operador de módulo en diferentes contextos.
— Shaun Luttin

1
Se agregaron ejemplos de operadores de asignación y ecuación
— Kohlbrr

17
En el caso de Foreach-Object, aconsejaría no usar el símbolo "%", ya que hace que sea más difícil para la gente leer / mantener su código, especialmente para las personas nuevas en PS. Seamos realistas, cuanta más gente apunte a la PS, mejor.
— Simon Catlin

1
¿Dónde puedo encontrar el significado de ForEach-Object en la documentación oficial de MSDN?
— derecha

No estoy de acuerdo con Simon Catlin, según esa lógica, todos deberíamos usar ensamblador porque el resto es solo azúcar sintáctico
— reggaeguitar

16

Una publicación de PowerShell: caracteres especiales y tokens proporciona una descripción de varios símbolos, incluidos%

% (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: El valor es un enlace, que describe varios caracteres especiales, incluido%
— Michael Freidgeim

Técnicamente es un alias de ForEach-Object. ForEachtambién es un alias para ForEach-Object, excepto cuando se usa al comienzo de una declaración, donde es una palabra clave de control de bucle (como while).
— mwfearnley

4

%puede reemplazar lo que no funcionará sin el o el .Get-ChildItem | ForEach-Object { write-host $_.Name }%ForEach-Object

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.