我有以下批處理文件,當運行詢問用戶輸入。這工作正常。從另一個傳遞參數調用批處理文件
@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