我有一个批处理文件,运行时会询问用户输入。这个工作正常。
@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 带参数运行:
>>test.bat foo bar
param1=foo
param2=bar
另一种方法是使用环境变量而不是命令行参数(也可以参见ppumkin的答案):
@echo off
:: Fetch param1
**set "param1=%globalparam1%"**
goto :param1Check
:param1Prompt
set /p "param1=Enter parameter 1: "
:param1Check
if "%param1%"=="" goto :param1Prompt
:: Fetch param2
**set "param2=%globalparam2%"**
goto :param2Check
:param2Prompt
set /p "param2=Enter parameter 2: "
:param2Check
if "%param2%"=="" goto :param2Prompt
:: Process the params
echo param1=%param1%
echo 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%
从命令行或其他应用程序/快捷方式中调用 passTo.bat
call passTo.bat PARAM1 PARAM2
@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命令