2011-05-04 13 views
13

Tengo el siguiente archivo de proceso por lotes que cuando se ejecuta solicita al usuario que ingrese la información. Esto funciona bienarchivo de proceso por lotes de otros parámetros que pasan

@REM Sample batch file 
SET PARAM1="" 
SET PARAM2="" 
SET /P PARAM1=Enter param1: %=% 
SET /P PARAM2=Enter param2: %=% 
@REM Process the params 

Quiero ser capaz ahora de llamar a este archivo por lotes desde otro y pasar los valores de los parámetros en el archivo por lotes anterior, y el usuario no será pidió de entrada. ¿Cómo puedo conseguir esto?

Respuesta

17

Creo que usted quiere algo como esto?

@echo off 

:: Fetch param1 
set "param1=%~1" 
goto :param1Check 
:param1Prompt 
set /p "param1=Enter parameter 1: " 
:param1Check 
if "%param1%"=="" goto :param1Prompt 

:: Fetch param2  
set "param2=%~2" 
goto :param2Check 
:param2Prompt 
set /p "param2=Enter parameter 2: " 
:param2Check 
if "%param2%"=="" goto :param2Prompt 

:: Process the params 
echo param1=%param1% 
echo param2=%param2% 

Prueba.bat ejecuta sin argumentos:

>>test.bat 
Enter parameter 1: foo 
Enter parameter 2: bar 
param1=foo 
param2=bar 

prueba.plazo bate con argumentos:

>>test.bat foo bar 
param1=foo 
param2=bar 

alternativa, el uso de variables de entorno en lugar de argumentos de línea de comando (véase también ppumkin's answer):

@echo off

:: Fetch param1
conjunto "param1 =% globalparam1%"
goto: param1C diablos
: param1Prompt
set/p "param1 = Introduzca parámetro 1:"
: param1Check
si "% param1%" == "" goto: param1Prompt

:: Fetch param2
set " param2 =% globalparam2%"
Goto: param2Check
: param2Prompt
set/p "param2 = Introduzca parámetro 2:"
: param2Check
si "% param2%" == "" Ir a: param2Prompt

:: Proceso de los params
Echo param1 =% param1%
eco param2 =% param2%

Sólo hay que establecer las variables de entorno globalparam1 y globalparam2 en su entorno o su archivo por lotes llamando a reprimir el impulso:

Prueba.bat ejecutar sin establecer las variables de entorno:

>>test.bat 
Enter parameter 1: foo 
Enter parameter 2: bar 
param1=foo 
param2=bar 

Prueba.bat ejecuta con las variables de entorno de ajuste:

>>set globalparam1=foo 

>>set globalparam2=bar 

>>test 
param1=foo 
param2=bar 

Nota: establecer las variables de entorno también se puede hacer, por ejemplo, en una secuencia de comandos por lotes.

+0

Esto es genial, pero la pregunta era cómo establecer variables globales en otro lote, de modo que si ejecuta un lote completamente diferente, pueda recogerlas del entorno global en función del código de muestra. ¿no? – ppumkin

+0

Arriba, mi respuesta a la pregunta, de acuerdo con mi comprensión de lo que desea el OP, dada la formulación de la pregunta y los comentarios sobre las otras respuestas ... El archivo de proceso por lotes "* puede invocarse por sí mismo donde se me solicita [I] para los parámetros * "mientras se mantiene la capacidad de" * llamar este archivo por lotes de otro y pasar los valores de los parámetros al archivo de proceso por lotes anterior, y al usuario no se le solicitará la entrada * " – mousio

+1

@ppumkin: Puede llamar a mi archivo por lotes desde otro y pasar los parámetros en la línea 'call'. Su enfoque parece ser llamar al archivo por lotes desde otro y pasar los parámetros configurando variables de entorno. Este es también un enfoque válido, el mío es solo una alternativa que me gusta usar y proponer. – mousio

6

En main.cmd:

set param1=%~1 
set param2=%~2 
echo %param1% - %param2% 

En caller.cmd:

call main.cmd hello world 

de salida:

hello - world 

Reference for batch script parameters

+0

pero quiero ser capaz de llamar al archivo main.bat por sí mismo también donde me piden los parámetros, ¿es esto posible? – amateur

+0

preguntado? como en el lote, ¿qué parámetros quieres pasar a sí mismo? – ppumkin

+0

@ppumkin sí que corrija – amateur

2

caller.bat /.cmd

@echo off 
cls 
set vara="Hello There" 
set varb=67890 

echo Variables set in caller.bat: 
echo %vara% 
echo %varb% 

echo Calling passTo.bat 
call passTo.bat %vara% %varb% 

passTo.bat /.cmd

@echo off 
echo. 
echo Inside passTo.bat 
set vara=%1 
set varb=%2 

echo vara: %vara% 
echo varb: %varb% 

Calling passTo.bat por sí solo o de dos ventanas de comandos o cualquier otra aplicación/acceso directo

call passTo.bat PARAM1 PARAM2 

Utilizando el establecer variables desde caller.bat dentro de otro lote

@echo off 
echo. 
echo Inside another.bat 
echo -- You can start another batch here that sets the environment variables 

set varOne=%vara% <- This gets the Environments Variable set in the nested batch bat using SET 
set varTwo=%varb% 

echo vara: %varOne% 
echo Is the same as 
echo %vara% 

echo varb: %varTwo% 
echo is again the same as 
echo %varb$ 

Puede que tenga que utilizar SETX

+0

pero quiero ser capaz de llamar al archivo passTo.bat por sí solo también donde me piden los parámetros, ¿es esto posible? – amateur

+0

sí, editó la respuesta – ppumkin

+0

así llamadas variables de entorno establecidas por otro lote? – ppumkin

Cuestiones relacionadas