배치 파일을 시작 / 호출 할 때 인수가 정의되어 있습니까?
배치 파일에서 다음 유효성 검사 배치 파일에 변수가 제공되지 않는 "사용"블록이 실행되지 않습니다.
if ("%1"=="") goto usage
@echo This should not execute
@echo Done.
goto :eof
:usage
@echo Usage: %0 <EnvironmentName>
exit 1
내가 뭘 잘못하고 있죠?
명령 줄 인수가 있었는지 세트에 대한 검사를 할 수 있습니다.으로 [%1]==[]
,하지만 데이브 코스타는 지적 , "%1"==""
또한 뜻이 작동합니다.
또한 사용 된 에코의 구문 오류를 수정했습니다. 또한 인수 가 exit
필요 /B
하지 않으면 CMD.exe
종료됩니다.
@echo off
if [%1]==[] goto usage
@echo This should not execute
@echo Done.
goto :eof
:usage
@echo Usage: %0 ^<EnvironmentName^>
exit /B 1
고급 예 :
⍟의 인수.
⍟ 파일 시스템 (
file
또는directory
?) 또는 일반string
.⍟ 파일인지 지정
⍟ 지정은 디렉토리입니다
⍟ 확장이 제한 레거시 펼쳐 작동합니다!
⍟ 최소한의 코드 ☺
@ 에코 : 고리 :: -------------------------- 인수가 있습니까? if [ "% ~ 1"] == [ ""] ( 에코 완료. 끝으로 이동 ) :: -------------------------- 인수가 있습니까? 존재하지 않는 경우 % ~ s1 ( 에코가 존재하지 않습니다. ) 다른 ( 에코 존재 존재하는 경우 % ~ s1 \ NUL ( echo는 디렉토리입니다. ) 다른 ( echo는 파일입니다 ) ) :: -------------------------- 시프트 고토 루프 : 종료 중지
✨ 기타 물건 ..✨
에 ■ %~1
-은 ~
어떤 포장을 제거 "
하거나 '
.
에 ■ %~s1
-는 s
경로가 될 수 있습니다 DOS 8.3 naming
파일 이름에 피할 공간에 좋은 트릭 물건을 확인하면서 (이 방법이 더와 자원을 포장 할 필요 인 "
들.
■ ["%~1"]==[""]
인수가 파일 / 디렉토리이거나 아직 일반 문자열 인 경우 "확실 할 수 없음"이므로 대신 표현식은 대괄호와 수정되지 않은 원본을 사용 %1
합니다 ( "
줄 바꿈이 없는 경우에만 ..)
만약 우리가 사용한 경우의 인수가없고 shift
arg-list 포인터가 마지막 것을 전달 했다면 표현식은로 평가됩니다 [""]==[""]
.
■ 이것은 더 많은 트릭을 사용하지 않고도 가능한 한 구체적입니다 (Windows-95의 배치 스크립트에서도 작동합니다 ...).
■ 실행 예
다른 이름으로 저장 identifier.cmd
무제한 인수를 식별 할 수 있습니다 (일반적으로 %1
- 로 제한됨 %9
). 인수를 반전 된 쉼표로 래핑하거나 8.3 이름 지정을 사용하거나 끌어서 놓기 (위 중 하나를 자동으로 수행)하는 것을 기억하십시오.
이를 통해 다음 명령을 실행할 수 있습니다.
⓵ identifier.cmd c:\windows
및 얻기
있다 디렉토리입니다 끝난
⓶ identifier.cmd "c:\Program Files (x86)\Microsoft Office\OFFICE11\WINWORD.EXE"
및 얻기
있다 파일입니다 끝난
⓷ 및 여러 인수 (물론 이것은 전체 거래입니다 ..)
identifier.cmd c:\windows\system32 c:\hiberfil.sys "c:\pagefile.sys" hello-world
그리고 얻을
있다 디렉토리입니다 있다 파일입니다 있다 파일입니다 존재하지 않는다 끝난.
당연히 훨씬 더 복잡 할 수 있지만 좋은 예는 항상 단순하고 최소한이어야합니다. :)
누구에게나 도움이되기를 바랍니다 :)
여기에 게시 : CMD Ninja-무제한 인수 처리, 파일 시스템에 존재하는지 식별, 파일 또는 디렉토리 식별
다음은 원하는 양의 APK 파일 (Android 앱)을 가져 와서 debug-console (ADB.exe)을 통해 장치에 설치하는 작업 예제입니다 . 이전 게시물을 ADB 설치-다중 구문을 사용하지 않는 대량 APK 설치 프로그램으로 만듭니다.
괄호를 제거하십시오.
샘플 배치 파일 :
echo "%1"
if ("%1"=="") echo match1
if "%1"=="" echo match2
위 스크립트 실행의 출력 :
C:\>echo ""
""
C:\>if ("" == "") echo match1
C:\>if "" == "" echo match2
match2
나는 실제로 괄호를 문자열의 일부로 취하고 비교되고 있다고 생각합니다.
IF "%~1"=="" GOTO :Usage
~는 % 1 자체를 인용하면 % 1을 인용 해제합니다.
""은 전달 된 특수 문자로부터 보호합니다. 예를 들어 & ping을 사용하여 스크립트 호출
IF "%1"=="" GOTO :Continue
.....
.....
:Continue
IF "%1"=="" echo No Parameter given
"% 1"== ""가 실패하면이 버전의 모든 버전이 특정 독 문자 조건에서 실패합니다. 정의 된 경우 또는 정의되지 않은 경우에만 안전합니다.
이것은 다른 답변과 동일하지만 하나의 레이블 만 사용하고 사용법을 먼저 표시하므로 추가적으로 일반적으로 맨 위에 배치되는 스크립트에 대한 일종의 문서 칭찬 역할을합니다.
@echo off
:: add other test for the arguments here...
if not [%1]==[] goto main
:: --------------------------
echo This command does something.
echo.
echo %0 param%%1 param%%2
echo param%%1 the file to operate on
echo param%%1 another file
:: --------------------------
exit /B 1
:main
:: --------------------------
echo do something with all arguments (%%* == %*) here...
그러나 cmd / batch를 사용할 필요가 없다면 WSL 또는 powershell에서 bash를 사용하면 더 건전한 구문과 덜 신비한 기능이 있습니다.
'IT' 카테고리의 다른 글
꼬리 재귀 함수를 최적화하기위한 Scala 주석은 무엇입니까? (0) | 2020.09.03 |
---|---|
목록 색인? (0) | 2020.09.03 |
jQuery : 부모의 특정 구매 방법? (0) | 2020.09.03 |
Big-oh vs big-theta (0) | 2020.09.03 |
원격 Git 저장소와 동기화하는 방법은 무엇입니까? (0) | 2020.09.03 |