Windows 批处理文件“这次是意外的”。

Windows 批处理文件“这次是意外的”。
@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

@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(>,大于)或GEQ(>=,大于或等于);
    • 因为批处理脚本中括号的特殊含义,所有开()都是逃脱在所有应该按字面意思使用的情况下(echoset /p)。尝试if 1==1 (echo (inner) parentheses)将表明这可能很重要。虽然这在给定代码片段,作为一般原则而言,这是值得的。

相关内容