Batch file 为什么批处理文件一直冻结?
我目前正在批量制作一个游戏。在下面的代码中,在第10次循环之后的某个时候,批处理文件完全停止工作 如果有人能帮助我,那将非常有用Batch file 为什么批处理文件一直冻结?,batch-file,Batch File,我目前正在批量制作一个游戏。在下面的代码中,在第10次循环之后的某个时候,批处理文件完全停止工作 如果有人能帮助我,那将非常有用 :: Check for death :: if !b0y! equ 0 if !px! equ 0 timeout /t 1 >nul && goto end if !b0y! equ 1 if !px! equ 1 timeout /t 1 >
:: Check for death ::
if !b0y! equ 0 if !px! equ 0 timeout /t 1 >nul && goto end
if !b0y! equ 1 if !px! equ 1 timeout /t 1 >nul && goto end
if !b0y! equ 2 if !px! equ 2 timeout /t 1 >nul && goto end
if !b0y! equ 3 if !px! equ 3 timeout /t 1 >nul && goto end
if !b0y! equ 4 if !px! equ 4 timeout /t 1 >nul && goto end
if !b0y! equ 5 if !px! equ 5 timeout /t 1 >nul && goto end
if !b0y! equ 6 if !px! equ 6 timeout /t 1 >nul && goto end
if !b0y! equ 7 if !px! equ 7 timeout /t 1 >nul && goto end
if !b0y! equ 8 if !px! equ 8 timeout /t 1 >nul && goto end
if !b0y! equ 9 if !px! equ 9 timeout /t 1 >nul && goto end
::Checking for player input ::
:getinput
for /f "delims=" %%x in (control.txt) do set direction=%%x
set "dir=%direction%"
:checkinput
if !dir! equ 0 set /a "px=!px!-1" >nul
if !dir! equ 1 set /a "px=!px!+1" >nul
if !dir! equ 2 goto pause
if !dir! equ 3 goto end
if !dir! equ 4 goto chooseboulder
echo 4>>control.txt
:: Choosing Boulder placement ::
:chooseboulder
set /a "num=%random%*10/32768"
if !num! equ 0 if !b0y! leq 9 goto chooseboulder
if !num! equ 1 if !b1y! leq 9 goto chooseboulder
if !num! equ 2 if !b2y! leq 9 goto chooseboulder
if !num! equ 3 if !b3y! leq 9 goto chooseboulder
if !num! equ 4 if !b4y! leq 9 goto chooseboulder
if !num! equ 5 if !b5y! leq 9 goto chooseboulder
if !num! equ 6 if !b6y! leq 9 goto chooseboulder
if !num! equ 7 if !b7y! leq 9 goto chooseboulder
if !num! equ 8 if !b8y! leq 9 goto chooseboulder
if !num! equ 9 if !b9y! leq 9 goto chooseboulder
set "b!num!y=9"
:: Delaying the game 0.75 seconds to make it easier to play ::
ping localhost -n 2 >nul
)
goto loop
如果你需要完整的代码,请留言。(我有点不愿意把我所有的代码都放在互联网上让大家看。)你似乎被延迟扩展所困扰
if %b0y% equ %px%timeout /t 1 >nul && goto end
似乎可以代替
if !b0y! equ 0 if !px! equ 0 timeout /t 1 >nul && goto end
if !num! equ 0 if !b0y! leq 9 goto chooseboulder
没有一个在处理dir
if !dir! equ 0 set /a "px=!px!-1" >nul
您可以用%
-不需要引号,nul
不起任何作用
整个街区
if !b0y! equ 0 if !px! equ 0 timeout /t 1 >nul && goto end
if !num! equ 0 if !b0y! leq 9 goto chooseboulder
可以用
if !b%num%y! leq 9 goto chooseboulder
在这种情况下,将num
的值替换为%num%
,然后计算b?y
的值-这就是的含义!b?y代码>-对的评估!瓦尔代码>延迟
将命令名用作变量或标签被视为不好的做法(dir
是命令名,就像pause
一样)
命令
echo 4>>control.txt
尝试将标准设备编号4(未定义)的输出重定向到已执行echo
的文件,该文件可能会生成ech,此时屏幕关闭。重定向器前面的数字将为任何标准设备调用此行为(0=stdin,1=stdout,2=stderr,3-9=undefined),可以通过使用
>>control.txt echo 4
说到这里,我现在注意到一个孤立的)
,这意味着这都在一个代码块(一系列括号内的语句)内,使我所说的delayedexpansion部分无效
if %b0y% equ %px%timeout /t 1 >nul && goto end
当您甚至没有向我们展示一条完整的语句时,您希望我们如何调试代码
您还没有告诉我们您的文件control.txt
中包含的内容,因此我们无法知道正在读取的内容,只能猜测
由于这都是代码块的一部分,您应该意识到标签不允许出现在代码块中,而在您提供的代码部分,getinput
、checkinput
和chooseboulder
都是标签,作为注释使用的原因是,它实际上是一个无法访问的标签。它被cmd
忽略,因为它是一个标签,因此对注释很有用,但它仍然是一个标签,会破坏代码块。使用rem
查看代码块中的注释。是时候进行一些“printf调试”。。。(echo有用的状态信息
到处都可以找到它停止的位置)@tessellingheckler好的,我想我会这样做的。我们不需要你的完整代码,但需要一个能显示你的问题的。一些随机片段没有帮助。