2011-05-04 79 views
13

我有以下批处理文件,当运行询问用户输入。这工作正常。从另一个传递参数调用批处理文件

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

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

回答

17

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

@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 

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

+0

这很好 - 但问题是如何在另一批次中设置全局变量,以便如果他运行完全不同的批次,可以根据示例代码从全局环境中选取它们。不是吗? – ppumkin 2011-05-05 05:11:01

+0

以上是我对这个问题的回答,根据我对OP想要的内容的理解,给出了问题的表述以及对其他答案的评论......批处理文件“*”可以在需要时自行调用为params *“,同时保持”从另一个称这个批处理文件并将参数值传递给上述批处理文件的能力,并且用户不会被要求输入*“ – mousio 2011-05-05 07:08:37

+1

@ppumkin:您可以调用我的批处理文件另一个并在'call'行传递参数。您的方法似乎是从另一个调用批处理文件并通过设置环境变量来传递参数。这也是一种有效的方法,我只是一个我喜欢使用和提出的选择。 – mousio 2011-05-05 07:15:03

6

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

+0

但我希望能够自己调用main.bat文件,也可以在那里询问参数,这可能吗? – amateur 2011-05-04 12:52:56

+0

问?像在批处理中询问你想传递给自己的参数是什么? – ppumkin 2011-05-04 12:56:29

+0

@ppumkin是的,正确 – amateur 2011-05-04 13:06:10

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% 

从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

+0

但我希望能够自己调用passTo.bat文件,也可以在那里询问参数,这可能吗? – amateur 2011-05-04 12:52:07

+0

yea-编辑回答 – ppumkin 2011-05-04 12:55:16

+0

像那样调用由另一批次设置的环境变量? – ppumkin 2011-05-04 13:16:31

相关问题