배치 파일을 좀 더 유연하게 만들려고합니다.
여러 인수 집합을 허용 할 수있는 배치 파일을 상상해보십시오.
그래서하는 대신
myexe "path1" /s1 /s2 | myexe path2 | ...
하나는 할 수 있습니다.
myexe ["path1" /s1 /s2] [path2] [...]
그래서 가장 먼저 떠오른 것은 myexe의 이름을 _myexe__로 바꾸고 myexe.bat라는 이름의 배치 파일을 만드는 것입니다.
내용 myexe.bat
:
@echo off
if "%1"=="" goto default
:start
_myexe__ %1
shift
if not "%1"=="" goto default
goto end
:default
_myexe__
:end
이제 가장 먼저 떠오르는 것은 큰 따옴표를 사용하는 것입니다.
그러나 여기에 문제가 있습니다. 매개 변수 중 하나가 큰 따옴표를 사용하면 어떻게 될까요 (예 : 위의 예에서 "path1")
나는 []을 사용하여 더 깔끔하게 만들고 명시 적으로 정의하지 않고도 단일 세트와 다중 세트를 구별 할 수있을만큼 내 배치 파일을 똑똑하게 만들 것입니다.
사용하지 않고 할 수있는 방법이 %varname~:sI,eI%
있습니까?
*
또는 포함 된 인수를 손상 시키므로 간단한 FOR로 인수를 구문 분석하는 것은 안전하지 않습니다. ?
파일을 찾고 있다고 가정하고 와일드 카드 마스크와 일치하는 모든 파일로 인수를 확장합니다.
또한 myexe.exe의 이름을 다른 이름으로 변경하더라도 배치 파일 이름을 myexe.bat로 지정하는 것에 대한 Compo의 우려를 공유합니다. myexeMulti.bat와 같은 스크립트를 호출하는 것이 좋습니다.
매개 변수를 안정적으로 구문 분석해야 할 때마다 항상 GOTO 루프를 사용하고 그 내용을 제어 할 수 없습니다.
+
매개 변수를 사용하여 각 매개 변수 그룹을 분리 하는 것이 좋습니다 .
다음은 항상 제공되는 강력한 솔루션입니다.
+
myexe에 매개 변수로 전달할 필요 가 없습니다.여러 번 사람들 if "%~1" neq ""
은를 사용하여 인수가 있는지 테스트하지만 해당 테스트는 ""
인수가없는 것으로 잘못 취급 합니다. 나는 보수적이며 ""
인수 로 전달하고 싶을 것이라고 가정 하므로 set arg=%1
arg가 정의되었는지 테스트 한 다음 테스트합니다.
@echo off
setlocal
set "args="
:loop
set arg=%1
if defined arg (
if .%1==.+ (
myexe %args%
set "args="
) else (
set args=%args% %1
)
shift /1
goto loop
)
myexe %args%
exit /b
사용자가 실행하면
myExeMulti /s1 /s2 "*" + + "abc" /s1 + "abc" /s1 /s2
그러면 스크립트가 실행됩니다.
myexe /s1 /s2 "*"
myexe
myexe "abc" /s1
myexe "abc" /s1 /s2
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다