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

ama*_*eur 14 cmd batch-file

我有以下批处理文件,当运行时询问用户输入.这很好用.

@REM Sample batch file
SET PARAM1=""
SET PARAM2=""
SET /P PARAM1=Enter param1: %=%
SET /P PARAM2=Enter param2: %=%
@REM Process the params
Run Code Online (Sandbox Code Playgroud)

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

mou*_*sio 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%
Run Code Online (Sandbox Code Playgroud)

Test.bat不带参数运行:

>>test.bat
Enter parameter 1: foo
Enter parameter 2: bar
param1=foo
param2=bar
Run Code Online (Sandbox Code Playgroud)

Test.bat运行参数:

>>test.bat foo bar
param1=foo
param2=bar
Run Code Online (Sandbox Code Playgroud)

替代方案,使用环境变量而不是命令行参数(另请参见ppumkin的答案):

@echo关闭

::获取param1
set"param1 =%globalparam1%"
goto:param1Check
:param1Prompt
set/p"param1 =输入参数1:"
:
param1 检查"%param1%"==""goto:param1Prompt

::获取param2
set"param2 =%globalparam2%"
goto:param2Check
:param2Prompt
set/p"param2 =输入参数2:"
:param2Check
if"%param2%"==""goto:param2Prompt

::处理params
echo param1 =%param1%
echo param2 =%param2%

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

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

>>test.bat
Enter parameter 1: foo
Enter parameter 2: bar
param1=foo
param2=bar
Run Code Online (Sandbox Code Playgroud)

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

>>set globalparam1=foo

>>set globalparam2=bar

>>test
param1=foo
param2=bar
Run Code Online (Sandbox Code Playgroud)

注意:设置环境变量也可以在例如调用批处理脚本中完成.


Ben*_*oit 10

main.cmd:

set param1=%~1
set param2=%~2
echo %param1% - %param2%
Run Code Online (Sandbox Code Playgroud)

caller.cmd:

call main.cmd hello world
Run Code Online (Sandbox Code Playgroud)

输出:

hello - world
Run Code Online (Sandbox Code Playgroud)

批处理脚本参数的参考