2011-02-02 26 views
15

En mi archivo por lotes quiero pasar múltiples parámetros a alguna otra aplicación.¿Cómo pasar múltiples params en lote?

ahora lo hago

app.exe %1 %2 

y sólo pueden pasar dos parámetros, pero quiero pasar todos los parámetros que se pasan al lote (yo preferiría no escribir % 1% 2% 3 % 4 ...)

¿Hay alguna forma mágica de hacerlo?

Respuesta

35

¡Hay una manera mágica! Lo sabía, pero no podía recordarlo.

su %*

3

Se podría utilizar el bucle SHIFT pronta y a través de los argumentos. Aquí hay un ejemplo demostrativo en el que reemplazaría el último aviso de ECHO con un aviso para cargar su aplicación.

@ECHO OFF 

SET PARAMS= 

:_PARAMS_LOOP 

REM There is a trailing space in the next line; it is there for formatting. 
SET PARAMS=%PARAMS%%1 
ECHO %1 
SHIFT 

IF NOT "%1"=="" GOTO _PARAMS_LOOP 

ECHO %PARAMS% 

PAUSE 

Esto puede ser útil si necesita algún tipo de conteo parámetro dinámico, o si quiere desactivar un determinado parámetro.

+0

+1, sólo sería colocar la verificación de los parámetros vacío * antes * de procesar el parámetro. –

3

Otra forma es usar un parámetro con comillas dobles. Cuando llame a la otra aplicación, simplemente use el dispositivo %~N en la línea de comando para eliminar las comillas.

Si algunos de los parámetros que desea pasar a la aplicación son dobles, estos caracteres deben repetirse dos veces.

Aquí es una secuencia de comandos ilustración que utiliza el primer parámetro como el nombre de la aplicación y la segunda como una lista de parámetros combinado para pasar a la aplicación:

@ECHO OFF 
CALL %1 %~2 

Estos son ejemplos de llamar a la secuencia de comandos para los diferentes casos (pase un parámetro o varios parámetros o parámetros cotizados).

  1. Pass 1 parámetro para la aplicación:

    C:\>mybatch.bat app.exe "app_param" 
    C:\>mybatch.bat app.exe app_param 
    
  2. Pass varios parámetros:

    C:\>mybatch.bat app.exe "app_param1 app_param2 app_param3" 
    
  3. pasa un parámetro que incluye espacios (y por lo tanto podrá ser citado):

    C:\>mybatch.bat app.exe """parameter with spaces""" 
    
  4. Un ejemplo combinado: algunos parámetros son con espacios, otros no lo son:

    C:\>mybatch.bat app.exe "param_with_no_spaces ""parameter with spaces"" another_spaceless_param" 
    
Cuestiones relacionadas