批量缺少操作符脚本失败



首先,我阅读了其他人的类似问题,但没有一个给定的解决方案有效。这也是我的第一个批处理文件之一。其背后的理念是,我按[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="+"

我知道可能有更简单的方法来完成这一点,但这就是我的学习方式。

问题可能是组合。

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

第一种形式用于确保行上的任何尾随空格都是,而不包含赋值。第二种方法在赋值中包含引号。

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

set/a q="5 "+" 1"

解决方法是使用
set "y=+"

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

除了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

做完全相同的事情的类似概念.....希望能有所帮助....在别的地方找到了这段代码

@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

最新更新