Windows “后出现意外错误”;在「;及在「;“做”;

Windows “后出现意外错误”;在「;及在「;“做”;,windows,batch-file,if-statement,cmd,Windows,Batch File,If Statement,Cmd,因此,我正在试验批处理脚本,并尝试制作类似于snake的东西。但我遇到了一个问题,我不知道是什么原因造成的。就在我开始的第一个循环中,我在3之后遇到了关于“)”的意外错误。我尝试制作另一个变量,它有“1 2 3”,并使用它来代替,但仍然得到几乎相同的结果。刚才它表明,这样做是出乎意料的 当然,我可以使用if语句,这显然也很有效,但我正在试验goto,看看脚本的速度是否会提高。因为使用if,输出3行代码至少需要半秒或更短的时间 @echo off chcp 65001 mode con: cols

因此,我正在试验批处理脚本,并尝试制作类似于snake的东西。但我遇到了一个问题,我不知道是什么原因造成的。就在我开始的第一个循环中,我在3之后遇到了关于“)”的意外错误。我尝试制作另一个变量,它有“1 2 3”,并使用它来代替,但仍然得到几乎相同的结果。刚才它表明,这样做是出乎意料的

当然,我可以使用if语句,这显然也很有效,但我正在试验goto,看看脚本的速度是否会提高。因为使用if,输出3行代码至少需要半秒或更短的时间

@echo off
chcp 65001
mode con: cols=50 lines=25
setlocal EnableDelayedExpansion
echo. > test.txt
set array[1]=2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2
set array[2]=2 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 2
set array[3]=2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2
for %%b in (1, 2, 3) do (
    for %%i in (!array[%%b]!) do (
        echo Loop Begins
        set LNr=%%i
        echo Loop%LNr%
        goto Loop%LNr%
        :Loop0
        echo 0
        echo|set /p ="░" >> test.txt
        goto LoopE
        :Loop1
        echo 1
        echo|set /p ="█" >> test.txt
        goto LoopE
        :Loop2
        echo 2
        echo|set /p = "#" >> test.txt
        goto LoopE
        :LoopE
    )
    echo. >> test.txt
)
echo. >> test.txt

此外,任何关于我可以在ANSI编码中使用哪些字符来避免使用UTF-8和更改CMD字体的想法?

1。
对于批处理循环中的循环将如下所示:
对于/l%%b in(1,2,3)do(…)


2.在变量周围添加引号是一种很好的做法,尤其是包含空格的变量。例如:
设置“数组[1]=200 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2”


3。您可以通过注册表项更改字体
注册表项:
HKLM\Software\Microsoft\WindowsNT\CurrentVersion\Console\TrueTypeFont

更改值,例如:
Lucida Console
的值为
0


reg/?
了解以编程方式更改的更多详细信息。

这是可行的,但我不确定它是否会产生所需的输出:

@echo off
chcp 65001
mode con: cols=50 lines=25
setlocal EnableDelayedExpansion
echo. > test.txt
set array[1]=2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2
set array[2]=2 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 2
set array[3]=2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2
for %%b in (1, 2, 3) do (
    for %%i in (!array[%%b]!) do (
        call :funct %%i
    )
    echo. >> test.txt
)
echo. >> test.txt
exit /b %errorlevel%

:funct
        echo Loop Begins
        set LNr=%1
        echo Loop%LNr%
        goto Loop%LNr%
        :Loop0
        echo 0
        echo|set /p ="░" >> test.txt
        goto LoopE
        :Loop1
        echo 1
        echo|set /p ="█" >> test.txt
        goto LoopE
        :Loop2
        echo 2
        echo|set /p = "#" >> test.txt
        goto LoopE
        :LoopE
        goto :eof
并生成类似于

#░░░░░░░░░░░░░░░░░░░░░░░░░░# 
#░░░░░░░░░░░░█░░░░░░░░░░░░░# 
#░░░░░░░░░░░░░░░░░░░░░░░░░░# 

GOTO中断for循环,因此您需要子例程。同时检查文档。有很多方法可以生成扩展的ASCII sharacters-,,,。

您需要去中断FOR循环上下文。考虑一个子程序来生成所有扩展的ASCII字符来检查这个-并且只需设置一个正确的CHCP代码。谢谢,是的,我认为它必须和GOTO做一些事情。