批处理缺少运算符脚本失败

时间:2014-05-09 00:49:30

标签: variables batch-file math

首先,我读了其他人类似的问题,但没有一个给定的解决方案有效。这也是我的第一个批处理文件之一。它背后的想法是我按[D]将块X向右移动,然后按[A]向左移动它。这是脚本。

@echo off
:start
set z=%q%
if "%z%"=="" set z=5
choice /c ad
set x=%errorlevel%
if %x%==a goto a
if %x%==d goto b
:sett
set /a q="%z% %y% 1"
if %q%==1 goto 1
if %q%==2 goto 2
if %q%==3 goto 3
if %q%==4 goto 4
if %q%==5 goto 5
if %q%==6 goto 6
if %q%==7 goto 7
if %q%==8 goto 8
if %q%==9 goto 9
if %q%==10 set q=1 && goto 1
pause
:a
set y="-"
goto sett
:b
set y="+"
goto sett
:1
echo.X
goto start
:2
echo..X
goto start
:3
echo...X
goto start 
:4
echo....X
goto start
:5
echo.....X
goto start 
:6
echo......X
goto start
:7
echo.......X
goto start
:8
echo........X 
goto start
:9
echo.........X
goto start

我认为(从其他人的帖子中收集),问题出在

set /a q="%z% %y% 1"

set y="-"

set y="+"

我知道可能有更简单的方法来实现这一目标,但这就是我学习的方式。艰难的方式。

3 个答案:

答案 0 :(得分:3)

问题可能是一个组合。

语法set "var=string"var的值设置为string,而set var="string"var的值设置为"string"

第一种形式用于确保线上的任何尾随空格包含分配的值。第二个包括分配值中的引号。

因此您的set /a q...命令将被解析为

设置/ a q =“5”+“1”

解决方案是使用

set "y=+"

set /a q=%z% %y% 1

答案 1 :(得分:2)

除了Magoo的回答 - 您误解了ErrorLevelchoice

choice /c ad
set x=%errorlevel%
if %x%==a goto a
if %x%==d goto b

ErrorLevel变量只会扩展为数字。对于choice命令,它将通过您提供的许多可能值扩展为1。 Expample

choice /c abc

如果用户按下a键,则%errorlevel%将展开为1。然而,如果他们按b,它将扩展为2,依此类推。

因此,您的两个if支票都失败了,您将直接转到:sett

您应该检查%x%是否等于12

choice /c ad
set x=%errorlevel%
if %x%==1 goto a
if %x%==2 goto b

答案 2 :(得分:0)

做同样事情的类似概念.....希望它有帮助...... 得到这个代码的其他地方

@setlocal enableextensions enabledelayedexpansion
@echo off
title movement
color 0a
set length=
set height= a
:controls
cls
echo Use WASD to move your character ([]).
echo.
for %%a in ( %height% ) do echo.
echo %length%[]
choice /c wasd /n
if %errorlevel% equ 1 call:up
if %errorlevel% equ 2 call:left
if %errorlevel% equ 3 call:down
if %errorlevel% equ 4 call:right
:left
setlength=!length:~0,-1!
goto controls
:right
set length=%length%
goto controls
:up
set height=!height:~0,-2!
goto controls
:down
set height=%height% a
goto control