직접 명령 프롬프트를 만들고 싶습니다.사용할 수없는 기호 (예 :/또는 :)가있는 변수에 IF 문 사용
if %adm%=="admin /y" (goto add)
내가 원래 명령 프롬프트에 그것을 테스트하고이 말한다 :
을 그리고이 내 명령입니다 조건 (예를 들어/h 또는 그런 일)으로의 명령을 원했다
/y = "admin/y"이 (가) 현재 예상치 못한 것입니다.
캐럿 (^
기호)을 사용해 보았지만 작동하지 않았습니다.
직접 명령 프롬프트를 만들고 싶습니다.사용할 수없는 기호 (예 :/또는 :)가있는 변수에 IF 문 사용
if %adm%=="admin /y" (goto add)
내가 원래 명령 프롬프트에 그것을 테스트하고이 말한다 :
을 그리고이 내 명령입니다 조건 (예를 들어/h 또는 그런 일)으로의 명령을 원했다
/y = "admin/y"이 (가) 현재 예상치 못한 것입니다.
캐럿 (^
기호)을 사용해 보았지만 작동하지 않았습니다.
명령 IF는 비교 값에 적어도 세 인수를 기대한다 : 문자열 (또는 정수)
==
, EQU
등는 Symbol equivalent to NEQ, LSS, GTR, etc. in Windows batch files에 대한 응답으로 상세히 설명한다. 명령 프롬프트 창에 if /?
도 실행하면 여러 창 페이지에서이 명령에 대한 도움말을 볼 수 있습니다.
명령 줄에서 인수 구분 기호는 공백 문자입니다.
%adm%
전혀 실행 명령 행하기 전에 Windows 명령 인터프리터 cmd.exe
하여 명령 라인 전처리 단계 동안 adm
환경 변수의 현재 값에 의해 대체된다. 사전 처리 후 실제로 실행되는 내용은 일괄 처리 파일의 맨 위에서 을 일시적으로 제거하거나이 파일을 @echo ON
으로 변경하거나이 줄을 주석 처리하고 배치 파일을 두 번 클릭하는 대신 명령 프롬프트 창에서 배치 파일을 실행하면 볼 수 있습니다. 첫 번째 인수로
if admin /y=="admin /y" (goto add)
명령 IF 해석 admin
.두 번째 인수는 IF에 의해 실제로 예상되는 문자열이 아니기 때문에 오류 메시지의 원인 인 지원되는 비교 연산자가 분명하지 않은 /y=="admin /y"
입니다.
공백 문자 또는 문자 &()[]{}^=;!'+,`~<|>
중 하나를 포함하는 인수 문자열은 공백을 얻기 위해 전체 인수 문자열을 큰 따옴표로 묶고 인수 문자열의 리터럴 문자로 해석되는 다른 문자를 필요로합니다.
그래서 가능한 해결책은 다음과 같습니다
if "%adm%"=="admin /y" goto add
배치 파일에서이 명령 줄에 전처리시 확장됩니다
if "admin /y" == "admin /y" goto add
Windows 명령 인터프리터가 앞에 공백을 삽입된다는 사실을 알 수있다
및 ==
이 두 번째 인수이고 유효한 비교 연산자입니다.
대괄호는 명령으로 제거됩니다. IF은 기본적으로 단일 명령 줄을 실행하도록 설계되었습니다. 괄호는 ELSE 분기가 필요하거나 조건에 따라 여러 명령 줄을 실행해야하는 경우에만 필요합니다. (
으로 시작하고 )
으로 끝나는 명령 블록은 사전 처리 단계에서 추가 단계를 야기하므로 실제로 필요하지 않은 경우 해당 이유 때문에 피해야합니다.
그러나 문자열 값의 모든 따옴표 "
배치 파일에 if "%adm%" == "admin /y" goto add
을 사용하여 다시 adm
넘김 IF 조건에 할당 된 점에 유의. 이것은 예
set /P "adm="
if "%adm%" == "admin /y" goto add
에 사용 볼 사용자는이 배치 파일 실행에 입사 될 수
if "" == "" echo rd /Q /S "C:\" & rem "" == "admin /y" goto add
: 배치 파일의 명령 라인을 실행하기 전에 팽창
" == "" echo rd /Q /S "C:\" & rem "
rd /Q /S "C:\"
이 출력되고 echo
이 없으면 배치 파일은 현재 사용자가 f를 삭제할 권한이있는 모든 디렉토리를 삭제하기 시작할 것입니다 iles 및 폴더.
환경 변수 adm
에 할당 된 문자열이 배치 파일의 사용자에 의해 입력되는 경우 지연된 환경 변수 확장을 사용하여 전처리 단계에서 잘못된 명령 줄을 수정하거나 그것과는 완전히 다른 무언가를하는 커맨드 라인.
setlocal EnableExtensions EnableDelayedExpansion
rem Other command lines in the batch file.
set /P "adm="
if /I "!adm!" == "admin /y" goto add
변수 adm
지연된 환경 변수 확장의 사용, 따라서이 명령 라인을 참조 환경은 사용자의 입력에 의해 실행을 위해 수정할 수 없다.
또한 선택적 매개 변수 /I
은 문자열 비교에서 대/소문자를 구분하지 않습니다.
MS-DOS 배치가 변수 %adm%
을 해당 값으로 확장 한 다음 해당 값의 마지막 토큰을 문자열과 비교하려고합니다. 프로그램이 마지막 토큰을 문자열과 비교하지 못하도록 변수를 따옴표로 묶을 수 있으므로 비교를 위해 단일 문자열로 평가됩니다. 올바른 MS-DOS 일괄 비교를 위해
IF "%adm%"=="admin /y"
% adm %에 둘러싸인 따옴표가 포함되어 있습니까? – ACatInLove
무엇을 의미합니까? – scriptmastere02
''% adm % "=="admin/y "'가 필요한 것입니다. 비교는 매우 리터럴입니다. '/'는 특별한 심볼 (스위치를 가리킴)이기 때문에'cmd'는'/'= 'admin/y "스위치를'if'에 적용하려는 시도로서'/'를 보았습니다, 이것은 불법입니다. – Magoo