2012-08-16 10 views
10

Quiero pasar una lista de valores separados por comas a un script como parte de un único interruptor.Powershell está eliminando la coma del argumento del programa

Aquí está el programa.

param(
    [string]$foo 
) 

Write-Host "[$foo]" 

Aquí está el ejemplo de uso

PS> .\inputTest.ps1 -foo one,two,three 

Yo esperaría que la salida de este programa sea "[uno, dos, tres]", sino que se está volviendo "[uno, dos, tres]" . Esto es un problema porque quiero usar las comas para delimitar los valores.

¿Por qué PowerShell elimina las comas y qué debo cambiar para preservarlas?

Respuesta

23

La coma es un símbolo especial en powershell para indicar un separador de matriz.

Sólo hay que poner los argumentos entre comillas:

inputTest.ps1 -foo "one, two, three" 

Alternativamente se puede 'cita' la coma:

inputTest.ps1 -foo one`,two`,three 
+0

Gracias. Esto es lo que estaba buscando. – StaticMethod

3

entre comillas por lo que lo interpreta como una variable, no una comas lista separada de tres:

PS> \ inputTest.ps1 -foo "uno, dos, tres"

.
3

opciones siguientes están disponibles

  1. Cotizaciones alrededor de todos los argumentos (')

    inputTest.ps1 -foo 'one,two,three'

  2. carácter de escape de Powershell antes de cada coma (tumba-acento (`))

    inputTest.ps1 -foo one`,two`,three

Las comillas dobles alrededor de los argumentos no cambian nada!
Las comillas simples eliminan la expansión.
carácter de escape (tumba-acento) elimina la expansión del siguiente carácter

1

si estás de paso parámetros desde un archivo por lotes, a continuación, enclse sus parametros de la siguiente manera "" "Param1, Param2, Param3, param4" ""

Cuestiones relacionadas