2014-01-23 2 views
-2

Я хочу написать игру, используя пакетный скрипт, но есть ошибка, и я не знаю, что делать.Пакетный файл не работает, как я могу его исправить?

@echo on 

goto log 

:inicio 

set "esquerda=caverna" 
set "esquerda2=6" 
set /p "run=Digite a acao: " 
    if %run%==help (
goto help) else (
goto comands) 


:carvena 

echo oi>"%userprofile%\desktop\oi.txt" 
pause>nul 

:comands 

echo %run% >"%tmp%\reino_de_merlock\personagem\comands.txt" 
cd "%tmp%\reino_de_merlock\personagem" 
type comands.txt | find /i "andar_esquerda" && echo andar>andar_esquerda.txt 
if exist andar_esquerda.txt (
set "andar=esquerda1" 
del /q andar_esquerda.txt 
goto andar1) 

:log 

for /f %%a in ('type "%tmp%\reino_de_merlock\personagem\agilidade.txt"') do (
    set "agilidade=%%a" & goto inicio) 

:andar1 

if "%andar%" == "esquerda1" (
set /a andar = agilidade - esquerda2 
if %andar% LEQ 0 (
goto %esquerda%)) 1>nul 2>nul 
pause>nul 

Ошибка в set /a andar = agilidade - esquerda2, переменная становится esquerda1 и право это -2, что ошибка?

+0

Ни один парень! я люблю дос, и я никогда не перестану его использовать !!! –

+0

Что не так с переменной становится 2? – Gabe

+0

Нет, переменная становится esquerda1, а правая - -2 –

ответ

1

В пределах оператора блока (a parenthesised series of statements), блок всей анализируется и затем выполняются. Любой %var% внутри блока будет заменен значением этой переменной во время разбора блока - до того, как будет выполнен блок.

Следовательно, IF (something) else (somethingelse) будет выполнен с использованием значений %variables% в момент возникновения ошибки IF.

Два распространенный способ преодоления этого является: 1) использовать setlocal enabledelayedexpansion и использовать !var! вместо %var%, чтобы получить доступ к измененному значению var или 2) для вызова подпрограммы, чтобы выполнить дальнейшую обработку с использованием измененных значений.

В вашем случае,

if %andar% LEQ 0 (
goto %esquerda%) 

содержится в блоке, который начинается

if "%andar%" == "esquerda1" (

и, следовательно, использует значения andar и esquerda1, как они были, когда if "%andar%" == "esquerda1" была достигнута, а не на новое значение andar рассчитано в пределах петля.

Ищите много записей SO на «замедленном расширении»

+0

Спасибо, парень! Я исправляю свой код! –

Смежные вопросы