从另一个传递参数调用批处理文件

时间:2011-05-04 12:39:09

标签: batch-file cmd

我有以下批处理文件,在运行时要求用户输入。这很好。

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

我希望现在能够从另一个调用此批处理文件并将参数值传递给上面的批处理文件,并且不会要求用户输入。我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:19)

我相信你想要这样的东西?

@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%

不带参数的Test.bat运行:

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

使用参数运行Test.bat:

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

替代方案,使用环境变量而不是命令行参数(另请参阅ppumkin's answer):

  

@echo off

     

::获取param1
     设置“param1 =%globalparam1%”
     转到:param1Check
     :param1Prompt
     set / p“param1 =输入参数1:”
     :param1Check
     if“%param1%”==“”goto:param1Prompt

     

::获取param2
     设置“param2 =%globalparam2%”
     转到:param2Check
     :param2Prompt
     set / p“param2 =输入参数2:”
     :param2Check
     if“%param2%”==“”goto:param2Prompt

     

::处理参数
     echo param1 =%param1%
     echo param2 =%param2%

只需在您的环境或调用批处理文件中设置环境变量globalparam1globalparam2即可取消提示:

在没有设置环境变量的情况下运行Test.bat:

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

使用设置环境变量运行Test.bat:

>>set globalparam1=foo

>>set globalparam2=bar

>>test
param1=foo
param2=bar

注意:设置环境变量也可以在例如一个调用批处理脚本。

答案 1 :(得分:9)

main.cmd

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

caller.cmd

call main.cmd hello world

输出:

hello - world

Reference for batch script parameters

答案 2 :(得分:3)

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%

从dos或命令窗口或任何其他应用程序/快捷方式单独调用passTo.bat

call passTo.bat PARAM1 PARAM2

在另一批次

中使用来自caller.bat的set Variables
@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$

您可能必须使用SETX