我有以下批处理文件,当运行询问用户输入。这工作正常。从另一个传递参数调用批处理文件
@REM Sample batch file
SET PARAM1=""
SET PARAM2=""
SET /P PARAM1=Enter param1: %=%
SET /P PARAM2=Enter param2: %=%
@REM Process the params
我希望现在能够从另一个调用此批处理文件和传递的参数值,上述批处理文件,用户不会被要求输入。我怎样才能做到这一点?
我有以下批处理文件,当运行询问用户输入。这工作正常。从另一个传递参数调用批处理文件
@REM Sample batch file
SET PARAM1=""
SET PARAM2=""
SET /P PARAM1=Enter param1: %=%
SET /P PARAM2=Enter param2: %=%
@REM Process the params
我希望现在能够从另一个调用此批处理文件和传递的参数值,上述批处理文件,用户不会被要求输入。我怎样才能做到这一点?
我相信你想要这样的东西?
@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 foo bar
param1=foo
param2=bar
替代,使用环境变量,而不是命令行参数(见ppumkin's answer):
关闭@echo
::取参数1
设置“param1 =%globalparam1%”
goto:param1C赫克
:param1Prompt
组/ P “参数1 =输入参数1:”
:param1Check
如果 “%的param1%” == “” GOTO:param1Prompt::抓取param2的
集“参数2 =%globalparam2%”
转到:param2Check
:param2Prompt
组/ p “param2的=输入参数2:”
:param2Check
如果 “%param2的%” == “” GOTO:param2Prompt::进程PARAMS
回声的param1 =%的param1%
回声param2的=%param2的%
只需设置的环境变量globalparam1
,并在您的环境globalparam2
或您的通话批处理文件来抑制提示:
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
注:设置环境变量也可以在例如完成一个调用批处理脚本。
在main.cmd
:
set param1=%~1
set param2=%~2
echo %param1% - %param2%
在caller.cmd
:
call main.cmd hello world
输出:
hello - world
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或命令窗口或任何其他应用程序/快捷方式
call passTo.bat PARAM1 PARAM2
使用电话passTo.bat自身将变量从caller.bat设置到另一批次内
@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
这很好 - 但问题是如何在另一批次中设置全局变量,以便如果他运行完全不同的批次,可以根据示例代码从全局环境中选取它们。不是吗? – ppumkin 2011-05-05 05:11:01
以上是我对这个问题的回答,根据我对OP想要的内容的理解,给出了问题的表述以及对其他答案的评论......批处理文件“*”可以在需要时自行调用为params *“,同时保持”从另一个称这个批处理文件并将参数值传递给上述批处理文件的能力,并且用户不会被要求输入*“ – mousio 2011-05-05 07:08:37
@ppumkin:您可以调用我的批处理文件另一个并在'call'行传递参数。您的方法似乎是从另一个调用批处理文件并通过设置环境变量来传递参数。这也是一种有效的方法,我只是一个我喜欢使用和提出的选择。 – mousio 2011-05-05 07:15:03