Windows 배치 파일이 "이번에는 예기치 않게"이었습니다.


0
@echo off
pause
set /a x=1
set /a n=0
set /p x_end=x (End)=
:loop
cls
set /a n=n+1
set /a x=x+n+1
set /a students=n+2
echo x=%x%, n=%n%, x (End)=%x_end%
if (%x%=%x_end% goto end)
goto loop
:end
echo Answer: x (End)=%x%, Students=%students%, n (end)=%n%
echo.
echo Click Anything To Exit...
pause > nul
exit

"if"라인은 % x_end % 변수에 넣은 것이 "이번에는 예상치 못한"메시지라는 메시지를 생성합니다.


1
너무 게으른 지금은 확인해야하지만 닫는 괄호는 goto.
Daniel B

답변:


0
@echo off
rem pause
set /a x=1
set /a n=0
set /p x_end=x ^(End^)=
rem ensure %x_end% will result to a number 
set /a "x_end=x_end"
:loop
  echo cls
  set /a n=n+1
  set /a x=x+n+1
  set /a students=n+2
  echo x=%x%, n=%n%, x ^(End^)=%x_end%
  rem pause >nul
  if %x% GTR %x_end% goto end
goto loop
:end
echo Answer: x ^(End^)=%x%, Students=%students%, n ^(end^)=%n%
echo(
echo Click Anything To Exit...
pause > nul
rem exit

위의 코드 스 니펫에는 다음과 같은 개선 사항이 있습니다.

  • 디버깅 목적으로 만
    • 약간 rem (머리 글자 pause, 최종 exit );
    • echo cls 대신에 cls;
  • 중대한
    • set /a "x_end=x_end" 보장하기 위해 %x_end% 사용자의 입력에 상관없이 숫자가됩니다.
    • if 유효한 구문 : 사용 GTR (& gt;보다 큼) 또는 GEQ (& gt; =,보다 크거나 같음);
    • 때문에 배치 스크립팅에서 괄호로 묶인 특별한 의미 , 모든 오프닝 ( 폐쇄 ) 아르 탈출 한 그것들을 문자 그대로 사용해야하는 모든 경우에 ( echoset /p ). 견딜 수 없는 if 1==1 (echo (inner) parentheses) 문제가 될 수 있음을 보여줄 것입니다. 이것은 중요하지 않지만 주어진 코드 스 니펫 (snippet)은 일반 원칙의 문제로 보람 있습니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.