source

Windows 배치 파일에서 "확신하시겠습니까?" 프롬프트를 표시하려면 어떻게 해야 합니까?

ittop 2023. 4. 22. 10:27
반응형

Windows 배치 파일에서 "확신하시겠습니까?" 프롬프트를 표시하려면 어떻게 해야 합니까?

여러 파일을 한 곳에서 다른 곳으로 자동 복사하는 배치 파일이 있습니다.유일한 것은 실수로 명령 버퍼에서 해당 명령을 선택하여 커밋되지 않은 변경을 대량 덮어쓰는 데 도움이 된다는 것입니다.

.bat 파일을 "Are you sure?"라고 출력하고 나머지 파일을 실행하기 전에 입력시키려면 어떤 코드가 필요합니까?

이외의 입력이 있는 경우는, 그 회선상에서 실행을 종료합니다.

가 전화했을 때exit, 닫힙니다.cmd.exe그건 내가 원하는 게 아니야

다음과 같은 것이 필요합니다.

@echo off
setlocal
:PROMPT
SET /P AREYOUSURE=Are you sure (Y/[N])?
IF /I "%AREYOUSURE%" NEQ "Y" GOTO END

echo ... rest of file ...


:END
endlocal

예를 들어 CHOSE 명령을 사용해 보십시오.

CHOICE /C YNC /M "Press Y for Yes, N for No or C for Cancel."

Windows 명령줄에서 사용자 프롬프트에 사용할 수 있는 명령어는 다음 두 가지가 있습니다.

  • 옵션과 함께 설정하다/P모든 Windows NT 버전에서 사용할 수 있습니다.
  • choice.exe는 PC 사용자용 Windows Vista 이후의 Windows 버전 및 Windows Server 2003 이후의 Windows 서버 버전에서 기본적으로 사용할 수 있습니다.

set은 Windows 명령어프로세서의 내부 명령어입니다.cmd.exe. ★★★/P사용자에게 문자열을 요구하는 프롬프트는 기본적으로 활성화되어 있는 명령어 확장자만 사용할 수 있습니다.이 확장자를 활성화하지 않으면 현재 거의 어떤 배치 파일도 작동하지 않습니다.

choice.exe는 다음 위치에 있는 개별 콘솔응용 프로그램(flash 명령어)입니다.%SystemRoot%\System32.파일choice.exe 의 경우는, Windows Server 2003 의 디렉토리에 할 수 .%SystemRoot%\System32Windows XP에서 사용할 수 있는 다른 많은 명령어와 마찬가지로 Windows XP에서 사용할 수 있는 명령어느낌은 Windows XP에서 기본적으로 사용할 수 없지만 Windows Server 2003에서는 기본적으로 사용할 수 있습니다.

다음과 같은 이유로 SET/P 사용보다 CHOSE 사용을 선호하는 것이 좋습니다.

  1. CHOSE는 옵션 뒤에 지정된 키(STDIN에서 각각 읽은 문자)만 받아들입니다./C(및 )는 사용자가 잘못된 키를 눌렀을 때 에러 비프음을 출력합니다.
  2. CHOICE 에서는, 사용 가능한 키 이외의 키를 누를 필요는 없습니다.SET / P 에서는, 또는 를 사용해 입력을 완료하도록 요구되고 있는 동안, 사용 가능한 키를 누르면, CHOICE 는 즉시 종료됩니다.
  3. 디폴트 옵션과 타임아웃을 정의하여 사용자를 기다리지 않고 몇 초 후에 자동으로 디폴트옵션을 계속할 수 있습니다.
  4. 이 에서 자동으로 프롬프트에 응답하는 것이 이 호출합니다.이 파일은 다음과 같은 방법으로 배치파일을 호출합니다.echo Y | call PromptExample.bat사용할 수 있습니다.
  5. 다음으로 쉽게 평가할 수 있는 ERROR LEVEL에 할당되는 누름 키(문자)에 따른 값을 가진 CHOSE exits로 사용자의 선택을 평가하는 것이 훨씬 쉬워집니다.
  6. SET /P에서 사용되는 환경변수는 사용자가 키만 누르거나 사용자에게 프롬프트를 표시하기 전에 정의되지 않은 경우 정의되지 않습니다.SET / P 명령줄에서 사용되는 환경변수는 이전에 정의된 경우 현재 값을 유지하고 사용자가 또는 를 누릅니다.
  7. 사용자는 SET/P 프롬프트에서 원하는 것을 입력할 수 있습니다.문자열은 나중에 배치파일 실행이 종료됩니다.cmd구문 오류로 인해 또는 코드화된 배치 파일의 배치 파일에 전혀 포함되지 않은 명령이 실행 중이기 때문입니다.SET/P를 실수로 또는 의도적으로 잘못된 사용자 입력으로부터 보호하기 위해서는 약간의 노력이 필요합니다.

다음으로 preferred CHOICE와 SET /P를 사용하는 프롬프트의 예를 나타냅니다.choice.exeWindows 를 실행하고 있는 중고 컴퓨터에서는 사용할 수 없습니다.

@echo off
setlocal EnableExtensions DisableDelayedExpansion
echo This is an example for prompting a user.
echo/
if exist "%SystemRoot%\System32\choice.exe" goto UseChoice

setlocal EnableExtensions EnableDelayedExpansion
:UseSetPrompt
set "UserChoice="
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 not errorlevel 1 goto UseChoice
if errorlevel 2 goto :EOF

:Continue
echo So you are sure. Okay, let's go ...
rem More commands can be added here.
endlocal

주의: 이 배치 파일에는 Windows 95/98/ME에서 사용할 수 없는 명령어 확장자가 사용됩니다.command.comcmd.exe명령어 통역을 맡았습니다.

" " "set "UserChoice=!UserChoice: =!"을 「」로 수 이 배치파일을 합니다.echo Y | call PromptExample.bat NT4/2000/XP 를 사용할 .echo Y| call PromptExample.bat두 문자열 비교를 실행하기 전에 STDIN에서 읽은 문자열에서 모든 공간을 삭제합니다.

echo Y | call PromptExample.bat결과적으로SPACE Y가 환경 변수에 할당됩니다.UserChoice는 2번 처리되기 때문입니다.이거는"Y ""N" 않다"Y"모든 공간을 먼저 삭제하지 않습니다. ★★★★★★★★★★★★★★★★★.UserChoiceY를 값으로 지정하면SPACE 프롬프트가 옵션과 함께 두 번째로 실행됩니다.N두 번째 프롬프트 실행 시 배치 파일에서 기본값으로 정의되어 있습니다.다음 프롬프트 실행 시 배치 파일 처리가 예기치 않게 종료됩니다.네, SET/P의 안전한 사용은 매우 까다롭습니다.

choice.exe with로 끝나다.로 0사용자가 를 누르거나 다음 질문 출력에 응답하는 경우cmd.exe를 사용하여 배치 작업을 종료합니다.그 때문에, 상태는if not errorlevel 1 goto UserChoice는, 또는 와의 배치 파일 코드로 유저에게 재차 확답을 요구하기 위해서 추가되었습니다.다이아라가 이 특별한 사용 사례에 대한 정보를 제공해 주셔서 감사합니다.

라벨 의 첫 행.:UseSetPrompt을 사용하다

set "UserChoice=N"

되어 있습니다.N즉, 사용자가 기본 선택을 사용하기 위해 또는 (또는 다음)을 누를 수 있습니다.

프롬프트 텍스트는 배치 파일에 기술된 대로 SET 명령에 의해 출력됩니다.따라서 프롬프트 텍스트는 보통 공백 문자로 끝나야 합니다.명령어 CHOSE는 프롬프트텍스트에서 말미의 모든 표준공간과 수평탭을 삭제하고 프롬프트텍스트에 공간을 추가합니다.따라서 CHOSE 명령 프롬프트텍스트는 공백 없이 또는 마지막에 쓸 수 있습니다.따라서 실행 시 표시되는 프롬프트텍스트에는 차이가 없습니다.

사용자 프롬프트 평가의 순서도 다이어라의 제안에 따라 완전히 변경할 수 있습니다.

@echo off
setlocal EnableExtensions DisableDelayedExpansion
echo This is an example for prompting a user.
echo/
if exist "%SystemRoot%\System32\choice.exe" goto UseChoice

setlocal EnableExtensions EnableDelayedExpansion
:UseSetPrompt
set "UserChoice="
set /P "UserChoice=Are you sure [Y/N]? "
set "UserChoice=!UserChoice: =!"
if /I not "!UserChoice!" == "Y" endlocal & goto :EOF
endlocal
goto Continue

:UseChoice
%SystemRoot%\System32\choice.exe /C YN /N /M "Are you sure [Y/N]?"
if not errorlevel 2 if errorlevel 1 goto Continue
goto :EOF

:Continue
echo So you are sure. Okay, let's go ...
endlocal

, 됩니다.:Continue사용자가 키를 확실히 눌렀을 경우.다른 모든 경우, 용 코드가 실행되어 사용자가 정말로 그 키를 눌렀거나, 의도적이거나 실수로 다른 것을 입력했거나, 또는 프레스를 누르거나 프롬프트 출력으로 다음 번을 결정함으로써 이 코드와 함께 배치 파일 처리가 종료됩니다.cmd배치 작업을 종료하지 않았습니다.

SET / PCHOCE사용하여 사용자에게 옵션 목록에서 선택하도록 요구하는 방법에 대한 자세한 내용은 "잘못된 사용자 입력으로 Windows 명령어인터프리터가 배치파일 실행을 종료하지 않도록 하는 방법"의 답변을 참조하십시오.

기타 힌트:

  1. IF는 비교 연산자의 왼쪽과 오른쪽의 두 문자열을 큰따옴표를 포함하여 비교합니다.따라서 대소문자를 구분하지 않는 비교란UserChoiceN ★★★★★★★★★★★★★★★★★」Y, ", "의 값입니다UserChoice.""N" ★★★★★★★★★★★★★★★★★」"Y".
  2. IF 비교 연산자EQU ★★★★★★★★★★★★★★★★★」NEQ는 -2147483648 ~2147483647 범위의 2개의 정수를 비교하기 위한 프라이머리 설계로, 2개의 스트링을 비교하기 위한 것은 아닙니다. EQU ★★★★★★★★★★★★★★★★★」NEQ문자열 비교에도 사용할 수 있지만 왼쪽 문자열을 정수로 변환하려고 하면 큰따옴표로 묶인 문자열을 비교할 수 있습니다. EQU ★★★★★★★★★★★★★★★★★」NEQ는, 유효하게 되어 있는 커맨드 확장의 경우에만 사용할 수 있습니다.는 ' 연산자'입니다.== ★★★★★★★★★★★★★★★★★」not ... ==합니다.command.comMS-DOS 및 Windows 95/98/ME 를 서포트하고 있습니다.IF 비교 연산자에 대한 자세한 내용은 윈도우즈 배치 파일의 NEQ, LSS, GTR 등에 해당하는 기호를 참조하십시오.
  3. " " "goto :EOF에서는 배치 파일 처리를 실제로 종료하려면 명령 확장자를 활성화해야 합니다.자세한 내용은 GOTO:EOF는 어디로 돌아가나요?를 참조해 주세요.

사용된 명령어와 명령어의 작동 방식을 이해하려면 명령 프롬프트 창을 열고 여기서 다음 명령을 실행하여 각 명령에 대해 표시되는 모든 도움말 페이지를 매우 주의 깊게 읽어 보십시오.

  • choice /?
  • echo /?
  • endlocal /?
  • goto /?
  • if /?
  • set /?
  • setlocal /?

다음 항목도 참조하십시오.

choice명령어를 사용할 수 없는 경우도 있습니다. 버전의 에서는, 「」Windows 「」set에는 「」가 ./p user " " " option option option "

SET /P variable=[promptString]

»set /?한 것에 대하여는, 을 참조해 주세요.

여기에서는 조금 더 쉬워집니다.

@echo off
set /p var=Are You Sure?[Y/N]: 
if %var%== Y goto ...
if not %var%== Y exit

또는

@echo off
echo Are You Sure?[Y/N]
choice /c YN
if %errorlevel%==1 goto yes
if %errorlevel%==2 goto no
:yes
echo yes
goto :EOF
:no
echo no

예/아니오 답변은 이쪽입니다.

대소문자를 구분하지 않습니다.

에 의해 되어 「」가 됩니다.choice아래 코드에서 사용할 수 있도록 필요한 모든 항목에 변수를 지정합니다.

@echo off
choice /M "[Opt 1]  Do you want to continue [Yes/No]"
if errorlevel 255 (
  echo Error
  ) else if errorlevel 2 (
  set "YourChoice=will not"
  ) else if errorlevel 1 (
  set "YourChoice=will"
  ) else if errorlevel 0 (
  goto :EOF
  )
  echo %YourChoice%
  pause

'Choice' 명령을 사용할 수도 있습니다.

@echo off
echo Sure?

CHOICE /C YN 

IF %ERRORLEVEL% EQU 1 goto CONTINUE
IF %ERRORLEVEL% EQU 2 goto END

:END
exit

:CONTINUE
echo hi
pause

배치 프로그램을 종료하고 프롬프트(A.K.A cmd.exe)를 닫지 않고 프롬프트로 돌아가려면 "exit /b"를 사용합니다.

이게 도움이 될지도 몰라.

set /p _sure="Are you sure?"
::The underscore is used to ensure that "sure" is not an enviroment
::varible
if /I NOT "_sure"=="y" (
::the /I makes it so you can
exit /b
) else (
::Any other modifications...
)

아니면 이렇게 많이 쓰고 싶지 않다면...

Set /p _sure="Are you sure?"
if /I NOT "_sure"=="y" exit /b
::Any other modifications and commands.

이게 도움이 되길...

다음은 Windows 10의 백업(.bat/batch) 스크립트에서 사용하는 간단한 예입니다. 이 스크립트를 사용하면 백업을 만들 때 다른 옵션을 사용할 수 있습니다.

...

:choice
set /P c=Do you want to rsync the archives to someHost[Y/N]?
if /I "%c%" EQU "Y" goto :syncthefiles
if /I "%c%" EQU "N" goto :doonotsyncthefiles
goto :choice

:syncthefiles
echo rsync files to somewhere ...
bash -c "rsync -vaz /mnt/d/Archive/Backup/ user@host:/home/user/Backup/blabla/"
echo done

:doonotsyncthefiles
echo Backup Complete!

...

이 블록은 필요한 만큼 가질 수 있습니다.

UI 확인을 사용할 수 있습니다.

yesnopup으로.배트

@echo off

for /f "tokens=* delims=" %%# in ('yesnopopup.bat') do (
    set "result=%%#"
)

if /i result==no (
    echo user rejected the script
    exit /b 1
) 

echo continue

rem --- other commands --

사용자에게 다음과 같은 메시지가 표시되고 선택 항목에 따라 스크립트가 계속됩니다.

여기에 이미지 설명 입력

iexp도 사용할 수 있는 것과 완전히 동일한 스크립트를 사용하여YN버튼유사한 팝업을 생성하는 bat.

단추 포함.bat 다음 스크립트를 사용할 수 있습니다.

@echo off

for /f "tokens=* delims=" %%# in ('buttons.bat "Yep!" "Nope!" ') do (
    set "result=%%#"
)

if /i result==2 (
    echo user rejected the script
    exit /b 1
) 

echo continue

rem --- other commands --

유저에게는, 다음과 같이 표시됩니다.

여기에 이미지 설명 입력

루프 등의 테스트와 변수가 올바른지 확인하기 위해 다음과 같이 하겠습니다.

:: rem at the top of the script
setlocal enabledelayedexpansion

:: choice example
CHOICE /C YNC /M "Continue? Press Y for Yes, N for No or C for Cancel."
If /I "[!errorlevel!]" NEQ "[1]" ( GOTO START_OVER )

많은 답이 있지만, 그 중 어느 것도 단순하고 직설적이지 않은 것 같다.사용하고 있는 코드는 다음과 같습니다.

choice /M "Do you want to continue?"

if %errorlevel% EQU 1 (
    ... run your code lines here
)

먼저 터미널을 엽니다.

그런 다음 입력해 주세요.

cd ~
touch .sure
chmod 700 .sure

그런 다음 .clear를 열고 안에 붙여넣습니다.

#!/bin/bash --init-file
PS1='> '
alias y='
    $1
    exit
'
alias n='Taskkill /IM %Terminal% /f'
echo ''
echo 'Are you sure? Answer y or n.'
echo ''

그런 다음 파일을 닫습니다.

~/.sure ; ENTER COMMAND HERE

그러면 명령을 계속하기 전에 확인하시겠습니까?라는 메시지가 나타납니다.

터미널을 엽니다.다음을 입력합니다.

echo>sure.sh
chmod 700 sure.sh

이거 꼭 붙이세요.

#!\bin\bash

echo -n 'Are you sure? [Y/n] '
read yn

if [ "$yn" = "n" ]; then
    exit 1
fi

exit 0

sure.sh 를 닫고 단말기에 입력합니다.

alias sure='~/sure&&'

이제 명령어를 입력하기 전에 sure를 입력하면 명령어를 계속하기 전에 확인 프롬프트가 나타납니다.

이것이 도움이 되기를 바랍니다!

언급URL : https://stackoverflow.com/questions/1794547/how-can-i-make-an-are-you-sure-prompt-in-a-windows-batch-file

반응형