2009-11-26 20 views
5

Tengo un test.bat archivo por lotes para iniciar una secuencia de comandos de PowerShell:Uso bate para iniciar script de PowerShell

@pushd "C:\myscripts" 
powershell .\test.ps1 arg1 "arg2 with space" arg3 
@popd 

El test.ps1 guión (que se encuentra en C: \ myscripts) es muy simple como:

# just print out the arguments 
Write-Output ("args count: {0}" -f $args.length) 
$args 

Luego intenté iniciar test.bat. Debería conseguir tres argumentos pasados ​​a PS1 pero me dieron el siguiente resultado: cuentan

args: 5 arg1 arg2 con espacio arg3

lo que esperaba en el guión, args [0] deben arg1 y args [1] debería ser "arg2 con espacio" y args3 [2] ser arg3. No puedo entender por qué el guión en realidad obtiene 5 argumentos.

¿Cómo puedo pasar parámetros de cmd o batch a powershell como esperaba? De esta manera:

args count: 3 
arg1 
arg2 with space 
arg3 

Respuesta

7
powershell .\test.ps1 arg1 'arg2 with space' arg3 

o

powershell .\test.ps1 arg1 """arg2 with space""" arg3 

Creo que se debe tratar de evitar el uso de comillas dobles como cmd ya les utiliza también y por lo tanto es un poco difícil de predecir qué es exactamente PowerShell obtendrá . Recuerde que esto se pasa a través de dos proyectiles y, por lo tanto, dos capas de escape/cotización.

PowerShell en sí no hace mucha distinción entre comillas simples y dobles. Al menos en este contexto, la diferencia es irrelevante.

0

OK. Creo que lo tengo:

@pushd "C: \ myscripts". powershell \ test.ps1 arg1 'arg2 con el espacio' arg3 @popd

single-char cita en lugar de doble. Tal vez signifiquen algo diferente en PS.

+0

No lo hacen. Pero sí significan cosas diferentes para 'cmd'. – Joey

Cuestiones relacionadas