윈도우즈 명령줄에서 배치 파일의 매개 변수 사용
Windows 에서는 배치 파일이 실행될 때 전달되는 인수에 어떻게 액세스합니까?
를 들어, 제가 이 '라고 하면요.hello.bat
라고 때hello -a
의 커맨드 라인이 Windows 의 커맨드 라인에 있는 것을 하려면 , 하면 좋을까요.-a
쟁으으? 츠요시
다른 가 이미 바와 는 배치 할 수.배치 파일에는 「Da」라고 .%1
로로 합니다.%9
사용할 수 있는 토큰은 다음 두 가지가 있습니다.
%0
는 명령줄에서 지정된 실행 파일(예: 파일) 이름입니다.%*
명령줄에 지정된 모든 매개 변수입니다. 이 매개 변수를 다른 프로그램으로 전송할 때 매우 유용합니다.
파라미터에 간단하게 접근하는 방법 외에 알아야 할 중요한 기술도 많이 있습니다.
매개 변수가 전달되었는지 확인하는 중
은 ', 하다, 하다, 하다'와 같은 구문을 .IF "%~1"==""
이것은 인수가 전혀 전달되지 않은 경우에만 해당됩니다..%1
; 칠드를 사용하지 않으면 구문 오류의 가능성을 포함하여 해당 값에 큰따옴표가 포함되어 있으면 예기치 않은 결과가 나타납니다.
9개 이상의 주장을 처리(또는 생활을 쉽게 하기 위한 것)
하는 9를 .SHIFT
이의 값을시켜 " "를 선택합니다.%0
을 %1
,%1
을 %2
등 , , 등.%9
는, 하는 경우)의 값은, 「10」을 호출하기 할 수 .이 값은 콜 전에는 변수를 통해 사용할 수 없었습니다.SHIFT
합니다).SHIFT /?
★★★★★★★★★★★★★★★★★★★★★」
SHIFT
는 파라미터를 특정 순서로 표시하지 않고 쉽게 처리하는 경우에도 유용합니다.들어 할 수 .-a
★★★★★★★★★★★★★★★★★」-b
이러한 경우은 명령줄을 해석하는 것입니다.
:parse
IF "%~1"=="" GOTO endparse
IF "%~1"=="-a" REM do something
IF "%~1"=="-b" REM do something else
SHIFT
GOTO parse
:endparse
REM ready for action!
이 스킴을 사용하면, 매우 복잡한 커맨드 라인을 비정상적으로 해석할 수 있습니다.
배치 파라미터의 치환
파일명을 나타내는 파라미터의 경우 셸은 다른 방법으로 접근할 수 없는 파일 조작과 관련된 많은 기능을 제공합니다.은 이음음음음음음음음음음음음음음음음음 with with with with with 로 시작하는 구성으로 할 수 있습니다.%~
.
예를 들어 인수로 전달된 파일의 크기를 가져오려면
ECHO %~z1
배치 파일이 기동된 디렉토리의 패스를 취득하려면 , 를 사용할 수 있습니다(매우 편리합니다).
ECHO %~dp0
하려면 , 「 」를 입력합니다.CALL /?
이치노
배치 파일에서 매개 변수 사용: %0 및 %9
매개 할 수 있습니다.%0
로로 합니다.%9
.
%0 is the program name as it was called.
%1 is the first command line parameter
%2 is the second command line parameter
and so on till %9.
명령줄에서 전달되는 파라미터는 영숫자로 공백으로 구분해야 합니다.★★%0
는 DOS DOS에서입니다.%0
AUTOEXEC를 사용합니다.부트에 、 BAT 。
예:
를 배치 .mybatch.bat
:
@echo off
@echo hello %1 %2
pause
을 호출합니다.mybatch john billy
★★★★
hello john billy
배치 파일에 대해 9개 이상의 매개 변수를 가져옵니다. 사용: %*
토큰 Percent Star 」%*
"나머지 매개변수"를 의미합니다.여기서 정의한 바와 같이 for 루프를 사용하여 캡처할 수 있습니다.
http://www.robvanderwoude.com/parameters.php
배치 매개 변수의 구분자에 대한 참고
명령줄 파라미터의 일부 문자는 배치파일에 의해 무시됩니다.이는 DOS 버전에 따라 "에스케이프" 여부에 따라서는 명령줄 내의 위치에 따라 달라집니다.
commas (",") are replaced by spaces, unless they are part of a string in
double quotes
semicolons (";") are replaced by spaces, unless they are part of a string in
double quotes
"=" characters are sometimes replaced by spaces, not if they are part of a
string in double quotes
the first forward slash ("/") is replaced by a space only if it immediately
follows the command, without a leading space
multiple spaces are replaced by a single space, unless they are part of a
string in double quotes
tabs are replaced by a single space
leading spaces before the first command line argument are ignored
@John ★:parse
/:endparse
스킴은 훌륭한 시작이고, 그는 첫 번째 합격에 대해 감사하지만, 만약 당신이 Windows의 고문 일괄 처리 시스템이 당신을 그렇게 쉽게 해 줄 것이라고 생각한다면… 음, 친구여, 당신은 충격을 받을 것입니다.저는 하루 종일 이 악마와 함께 지냈고, 많은 고통스런 연구와 실험 끝에 마침내 실생활에서 사용할 수 있는 무언가를 해냈습니다.
, 효용을 하고 싶다고 합시다.foobar
명령어가 초기 명령어가 필요합니다. 파라미터가 .--foo
옵션 값(물론 다른 파라미터는 사용할 수 없음)을 사용합니다.값이 누락되면 디폴트로 설정됩니다.default
인 션 . . . . . . . . . .도 있습니다.--bar
필요한 값을 사용합니다.마지막으로 깃발을 들 수 있다.--baz
값이 허용되지 않습니다.오, 그리고 이 변수들은 어떤 순서로도 나올 수 있어요.
즉, 다음과 같습니다.
foobar <command> [--foo [<fooval>]] [--bar <barval>] [--baz]
,요. 」 、 「 」 、 「 」 、 「 」( )git
★★★★★★★★★★★★★★★★?
그 이상의 소문은 생략하고, 이하에 해결책을 제시합니다.
@ECHO OFF
SETLOCAL
REM FooBar parameter demo
REM By Garret Wilson
SET CMD=%~1
IF "%CMD%" == "" (
GOTO usage
)
SET FOO=
SET DEFAULT_FOO=default
SET BAR=
SET BAZ=
SHIFT
:args
SET PARAM=%~1
SET ARG=%~2
IF "%PARAM%" == "--foo" (
SHIFT
IF NOT "%ARG%" == "" (
IF NOT "%ARG:~0,2%" == "--" (
SET FOO=%ARG%
SHIFT
) ELSE (
SET FOO=%DEFAULT_FOO%
)
) ELSE (
SET FOO=%DEFAULT_FOO%
)
) ELSE IF "%PARAM%" == "--bar" (
SHIFT
IF NOT "%ARG%" == "" (
SET BAR=%ARG%
SHIFT
) ELSE (
ECHO Missing bar value. 1>&2
ECHO:
GOTO usage
)
) ELSE IF "%PARAM%" == "--baz" (
SHIFT
SET BAZ=true
) ELSE IF "%PARAM%" == "" (
GOTO endargs
) ELSE (
ECHO Unrecognized option %1. 1>&2
ECHO:
GOTO usage
)
GOTO args
:endargs
ECHO Command: %CMD%
IF NOT "%FOO%" == "" (
ECHO Foo: %FOO%
)
IF NOT "%BAR%" == "" (
ECHO Bar: %BAR%
)
IF "%BAZ%" == "true" (
ECHO Baz
)
REM TODO do something with FOO, BAR, and/or BAZ
GOTO :eof
:usage
ECHO FooBar
ECHO Usage: foobar ^<command^> [--foo [^<fooval^>]] [--bar ^<barval^>] [--baz]
EXIT /B 1
네, 정말 그렇게 심해요.https://stackoverflow.com/a/50653047/421049,에 있는 유사한 게시물을 참조하십시오.이 게시물에서는 로직의 진행 상황과 특정 구성을 사용한 이유에 대한 자세한 분석을 제공합니다.
끔찍하다.그 대부분은 오늘 배워야 했어요.그리고 아팠다.
배치 파일이 할당되는 변수인 한 프로그램 뒤에 텍스트를 자동으로 전달합니다.이 문자열은 전송된 순서대로 전달됩니다. 예를 들어 %1이 프로그램이 호출된 후 첫 번째 문자열이 됩니다.
Hello.bat이 있고 그 내용은 다음과 같습니다.
@echo off
echo.Hello, %1 thanks for running this batch file (%2)
pause
batch in 명령어를 호출합니다.
hello.bat APerson241%date%
다음 메시지가 반환됩니다.
안녕하세요, APerson241님, 이 배치 파일을 실행해 주셔서 감사합니다(2013년 1월 11일)
변, ,, ,, )를 합니다..BAT
및 변수라고 불립니다.%0
로로 합니다.%9
언급URL : https://stackoverflow.com/questions/14286457/using-parameters-in-batch-files-at-windows-command-line
'programing' 카테고리의 다른 글
로컬 호스트에서 https/SSL을 사용하려면 어떻게 해야 합니까? (0) | 2023.04.22 |
---|---|
WPF ListView에서 WrapPanel이 랩되지 않음 (0) | 2023.04.22 |
Azure, 정적 콘텐츠(이미지/CSS 등)를 저장 및 전개하는 최선의 방법 (0) | 2023.04.22 |
간단한 HTML 쓰는 법Drop Down List For()? (0) | 2023.04.22 |
파일 또는 어셈블리 'Newtonsoft'를 로드할 수 없습니다.Json, 버전=4.5.0.0, Culture=중립, PublicKey토큰=30ad4fe6b2a6aed' (0) | 2023.04.22 |