Windows 명령 줄에서 사용자 프롬프트에 사용할 수있는 두 가지 명령이 있습니다.
- 설정 옵션을
/P
사용할 수 명령 확장으로 모든 Windows NT 버전에서 사용 가능 하고
- choice.exe 는 기본적으로 Windows Vista 이상 PC 사용자 용 Windows 버전과 Windows Server 2003 이상 Windows 서버 버전에서 사용할 수 있습니다.
set 는 Windows 명령 프로세서의 내부 명령입니다 cmd.exe
. /P
사용자에게 문자열을 묻는 옵션 은 기본적으로 활성화되어있는 활성화 된 명령 확장에서만 사용할 수 있습니다. 그렇지 않으면 요즘에는 거의 배치 파일이 작동하지 않습니다.
choice.exe 는에있는 별도의 콘솔 응용 프로그램 (외부 명령)입니다 %SystemRoot%\System32
. Windows XP에서는 기본적으로 사용할 수 없지만 Windows Server 2003에서는 기본적으로 사용할 수있는 다른 많은 명령처럼 Windows XP에서 choice.exe
사용할 수 있도록 Windows Server 2003의 디렉터리 %SystemRoot%\System32
를 Windows XP 시스템의 디렉터리 에 복사 할 수 있습니다 .
그것은 찬성 사용하는 것이 좋습니다 CHOICE 의 사용을 통해 SET / P 다음과 같은 이유로 인해 :
- CHOICE 는 옵션 (및 ) 뒤에 지정된 키 (각각 STDIN 에서 읽은 문자) 만 허용 하고 사용자가 잘못된 키를 누르면 오류 경고음을 출력합니다.
/C
Ctrl+C
- CHOICE 는 허용되는 키 중 하나 이외의 다른 키를 누를 필요가 없습니다. CHOICE 는 허용 가능한 키를 누르면 즉시 종료되며 SET / P 는 사용자가 RETURN또는로 입력을 완료해야합니다 ENTER.
- 함께 것이 가능하다 CHOICE가 자동으로 사용자를 기다리지 않고 몇 초 후 기본 옵션을 계속하려면 기본 옵션 및 시간 제한을 정의 할 수 있습니다.
- 출력은
echo Y | call PromptExample.bat
on using CHOICE 와 같은 것을 사용하여 프롬프트가있는 배치 파일을 호출하는 다른 배치 파일에서 자동으로 프롬프트에 응답 할 때 더 좋습니다 .
- 사용자의 선택의 평가는 훨씬 쉽게 CHOICE 인해 초이스 에 할당 된 프레스 키 (문자)에 따라 값이 종료 ERRORLEVEL 쉽게 다음 평가 될 수있다.
- SET / P 에서 사용되는 환경 변수 는 사용자가 키만 누르 RETURN거나 ENTER사용자에게 메시지를 표시하기 전에 정의되지 않은 경우 정의되지 않습니다. SET / P 명령 줄 에서 사용 된 환경 변수는 이전에 정의 된 경우 현재 값을 유지하고 사용자는 RETURN또는 ENTER.
- 사용자는 구문 오류 로 인해 나중에 배치 파일 실행이 종료 되거나 배치 파일에 전혀 포함되지 않은 명령을 실행할 때 문자열을 포함하여 SET / P 로 프롬프트 될 때 무엇이든 자유롭게 입력 할 수
cmd
있습니다. 좋은 코딩 된 배치 파일. 실수 또는 의도적으로 잘못된 사용자 입력으로 SET / P를 보호 하려면 약간의 노력이 필요 합니다.
다음은 Windows를 실행하는 중고 컴퓨터에서 사용할 수없는 기본 선택 및 대신 SET / P 를 사용하는 프롬프트 예 choice.exe
입니다.
@echo off
echo This is an example for prompting a user.
echo/
if exist "%SystemRoot%\System32\choice.exe" goto UseChoice
setlocal EnableExtensions EnableDelayedExpansion
:UseSetPrompt
set "UserChoice=N"
set /P "UserChoice=Are you sure [Y/N]? "
set "UserChoice=!UserChoice: =!"
if /I "!UserChoice!" == "N" endlocal & goto :EOF
if /I not "!UserChoice!" == "Y" goto UseSetPrompt
endlocal
goto Continue
:UseChoice
%SystemRoot%\System32\choice.exe /C YN /N /M "Are you sure [Y/N]? "
if errorlevel 2 goto :EOF
:Continue
echo So your are sure. Okay, let's go ...
참고 : 이 배치 파일은 명령 인터프리터 command.com
대신 사용 하는 Windows 95 / 98 / ME에서 사용할 수없는 명령 확장을 사용 합니다 cmd.exe
.
Windows NT4 / 2000 / XP set "UserChoice=!UserChoice: =!"
에서이 배치 파일을 호출 할 수 있도록 명령 줄 이 추가되었으며 . 두 문자열 비교를 실행하기 전에 STDIN 에서 읽은 문자열에서 모든 공백을 삭제합니다 .echo Y | call PromptExample.bat
echo Y| call PromptExample.bat
echo Y | call PromptExample.bat
결과 Y는SPACE 환경 변수에 할당하기 UserChoice
. "Y "
대소 문자를 구분하지 "N"
않거나 "Y"
먼저 모든 공백을 삭제 하지 않기 때문에 프롬프트를 두 번 처리하게됩니다 . 그래서 UserChoice
와 YSPACE 값이 옵션을 사용하여 메시지를 두 번 실행 결과 것처럼 N
두 번째 프롬프트 실행에 배치 파일에서 기본값으로 정의하는 배치 파일 처리의 예상치 못한 종료에서 다음 결과. 예, SET / P 의 안전한 사용 은 정말 까다 롭지 않습니까?
옵션 목록에서 사용자에게 선택하라는 메시지를 표시하기위한 SET / P 및 CHOICE의 사용에 대한 자세한 내용은 Windows 명령 인터프리터가 잘못된 사용자 입력으로 배치 파일 실행을 종료하지 못하도록하는 방법에 대한 답변을 참조하십시오 .
더 많은 힌트 :
- IF 는 비교 연산자의 왼쪽과 오른쪽 두 문자열을 큰 따옴표 를 포함 하여 비교 합니다. 비교 대소 문자 구분은의 값이 아닙니다 그래서
UserChoice
으로 N
하고 Y
있지만,의 값 UserChoice
에 의해 둘러싸여 "
로 "N"
하고 "Y"
.
- IF의 비교 연산자
EQU
와는 NEQ
범위 내에서 두 개의 정수를 비교 -2147483648 2147483647에 대한 아니라 두 문자열을 비교하기위한 주요 설계되었습니다. EQU
그리고는 NEQ
정수로 왼쪽 문자열을 변환하는 쓸데없는 시도에서 따옴표로 문자열을 비교할에 문자열 비교를 위해도 작동하지만 결과. EQU
및 NEQ
활성화 명령 확장에서만 사용할 수 있습니다. 문자열 비교를위한 비교 연산자가 ==
하고 not ... ==
심지어 심지어 장애인 명령 확장과 함께 작동하는 command.com
MS-DOS와 / 98 윈도우 95 / ME는 이미 지원. IF 비교 연산자 에 대한 자세한 내용 은 Windows 배치 파일에서 NEQ, LSS, GTR 등에 해당하는 기호를 참조하십시오 .
- 이 명령
goto :EOF
은 실제로 배치 파일 처리를 종료하기 위해 활성화 된 명령 확장이 필요합니다. 자세한 내용 은 GOTO : EOF가 어디로 돌아가나요?를 참조하세요.
사용 된 명령과 작동 방식을 이해하려면 명령 프롬프트 창을 열고 다음 명령을 실행 한 다음 각 명령에 대해 표시된 모든 도움말 페이지를주의 깊게 읽으십시오.
choice /?
echo /?
endlocal /?
goto /?
if /?
set /?
setlocal /?
또한보십시오:
SET AREYOUSURE=N
명령 창에서 이전에 스크립트를 이미 실행 한 경우 선택을 취소하기 위해 프롬프트 앞에 추가하는 것 입니다. 이것이 없으면 기본값은 이전에 선택한 선택으로 유지됩니다.