2011-05-04 80 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

相關問題