批处理文件不起作用,我该如何解决?

时间:2014-01-23 02:31:14

标签: batch-file

我想使用批处理脚本编写游戏,但是出现错误,我不知道该怎么做。

@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,错误是什么?

1 个答案:

答案 0 :(得分: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" (

因此使用andaresquerda1的值与达到if "%andar%" == "esquerda1"时的值相同,而不是andar计算中的新值< / strong>循环。

在'延迟扩展'上寻找许多SO条目