我正在向批處理文件發送各種參數。在我需要的參數旁邊的 「-l」 ..批處理文件:基於另一個子串的存在提取子串
例如:調用.BAT時
TEST.BAT sampl.exe -s SSSS -m MMMM -l路徑-k KKKK - d dddd
在此我需要基於-l的存在來提取「路徑」。一般來說,我需要將下一個參數提取到「-l」。有沒有辦法我可以做到這一點?請幫助
我正在向批處理文件發送各種參數。在我需要的參數旁邊的 「-l」 ..批處理文件:基於另一個子串的存在提取子串
例如:調用.BAT時
TEST.BAT sampl.exe -s SSSS -m MMMM -l路徑-k KKKK - d dddd
在此我需要基於-l的存在來提取「路徑」。一般來說,我需要將下一個參數提取到「-l」。有沒有辦法我可以做到這一點?請幫助
想法是遍歷參數列表,如果找到-l,則調用另一個部分,然後提取下一個參數。
SHIFT從可用參數列表中刪除第一個參數。例如:
如果運行:sampl.exe -s SSSS -m MMMM -l路徑-k KKKK -d DDDD
可用參數是= -s SSSS -m MMMM -l路徑-k KKKK -d DDDD \
如果腳本執行你SHIFT,則可用參數會= SSSS -m MMMM -l路徑-k KKKK -d DDDD
請參見下面的代碼示例:
@ECHO OFF
SET path=
SET mmm=
SET sss=
SET ddd=
REM Loop through passed parameters
:LOOP
IF [%1]==[] GOTO LOOP_END
IF [%1]==[-s] @CALL :PROCESS_S %2
IF [%1]==[-m] @CALL :PROCESS_M %2
IF [%1]==[-l] @CALL :PROCESS_L %2
IF [%1]==[-d] @CALL :PROCESS_D %2
SHIFT
GOTO LOOP
:LOOP_END
REM call your actual end result here.. Once the batch file gets here, the variable path would have been set if there was a -l <my path> passed, otherwise it would be empty
cd %path%
runmyprogram.exe %sss% %mmm% %ddd%
GOTO:EOF
REM Define your methods down here.
:PROCESS_S
IF [%1]==[] GOTO:EOF
SET sss=%1
SHIFT
GOTO:EOF
:PROCESS_M
IF [%1]==[] GOTO:EOF
SET mmm=%1
SHIFT
GOTO:EOF
:PROCESS_L
IF [%1]==[] GOTO:EOF
SET path=%1
SHIFT
GOTO:EOF
:PROCESS_D
IF [%1]==[] GOTO:EOF
SET ddd=%1
SHIFT
GOTO:EOF
這就是我期待的關鍵字..「SHIFT」..我可以從中得到它..非常感謝.. – Ganesh
下面是一個像這樣的批處理文件的標準代碼。該代碼會很簡單,如果變量名是比開關相同,即set s=ssss
set l=path
等
@echo off
if "%1" neq "" goto getParams
rem A simple description of how to use this Batch file goes here, ie:
echo Test.bat progname [-s ssss] [-m mmmm] [-l path] [-k kkkk] [-d dddd]
goto :EOF
:getParams
rem Set here default parameter values, ie:
for %%a in (s m l k d) do set %%a=
set progName=%1
:shift
shift
for %%a in (s m l k d) do if /I "%1" equ "-%%a" goto getParam
goto main
:getParam
set %1=%2
shift
goto shift
:main
rem Run here the program, ie:
cd %l%
%progName% %s% %m% %k% %d%
我希望它可以幫助...
感謝您的另一個解決方案.. – Ganesh
,對其他參數始終存在?例如,在-l之前的'-s ssss' – Marc
沒有..那不知道..它可能會或可能不會通過.. – Ganesh
這並不直接回答你的問題,但我認爲它可以幫助你:http://stackoverflow.com/a/8162578/1012053 – dbenham