2012-05-17 5 views
0

배치 파일에 다양한 매개 변수를 전송 중입니다. 그 나는 매개 변수를 필요배치 파일 : 다른 부분 문자열의 존재 여부에 따라 하위 문자열 추출

예를 들어

있습니다 .. "-l"옆에 다음 박쥐를 호출 할 때

TEST.BAT sampl.exe -s ssss는 -m MMMM -l 경로 -k KKKK - d dddd

이 경우 나는 "-l"의 존재에 따라 "경로"를 찾아야합니다. 일반적으로 다음 매개 변수를 "-l"로 추출해야합니다. 내가 할 수있는 방법이 있니? 도와주세요

+0

이 다른 매개 변수는 항상 존재합니까? 예를 들어, -l? – 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 으음 -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

관련 문제