O arquivo em lotes do Windows "foi inesperado desta vez".

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

A linha "if" está produzindo uma mensagem dizendo que o que você colocou na variável% x_end% "foi inesperado desta vez".

    
por user455368 04.06.2015 / 17:47

1 resposta

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

Existem as próximas melhorias no snippet de código acima:

  • meramente para fins de depuração
    • algum rem (inicial pause , final exit );
    • echo cls em vez de cls ;
  • importante
    • set /a "x_end=x_end" para garantir que %x_end% resultará em um número para qualquer entrada do usuário;
    • if sintaxe válida : use GTR (& gt ;, maior que) ou GEQ (> =, maior que ou igual);
    • por causa do parênteses com significado especial no script em lote , todas abrindo ( e fechando ) são < href="http://ss64.com/nt/syntax-esc.html"> escapou em todas as ocorrências em que elas deveriam ser usadas literalmente ( echo e set /p ). Tentar if 1==1 (echo (inner) parentheses) mostrará que isso pode ser importante. Embora isso não importe no trecho de código dado , vale a pena como uma questão de princípio geral.
por 05.06.2015 / 07:58