2012-05-17 45 views
0

我正在向批處理文件發送各種參數。在我需要的參數旁邊的 「-l」 ..批處理文件:基於另一個子串的存在提取子串

例如:調用.BAT時

TEST.BAT sampl.exe -s SSSS -m MMMM -l路徑-k KKKK - d dddd

在此我需要基於-l的存在來提取「路徑」。一般來說,我需要將下一個參數提取到「-l」。有沒有辦法我可以做到這一點?請幫助

+0

,對其他參數始終存在?例如,在-l之前的'-s ssss' – Marc

+0

沒有..那不知道..它可能會或可能不會通過.. – Ganesh

+0

這並不直接回答你的問題,但我認爲它可以幫助你:http://stackoverflow.com/a/8162578/1012053 – dbenham

回答

0

想法是遍歷參數列表,如果找到-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 
+0

這就是我期待的關鍵字..「SHIFT」..我可以從中得到它..非常感謝.. – Ganesh

1

下面是一個像這樣的批處理文件的標準代碼。該代碼會很簡單,如果變量名是比開關相同,即set s=ssssset 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% 

我希望它可以幫助...

+0

感謝您的另一個解決方案.. – Ganesh

相關問題