Batch file 为什么使用echo命令为脚本提供其他输出?

Batch file 为什么使用echo命令为脚本提供其他输出?,batch-file,Batch File,输出不是我期望得到的。。。尤其是输出的第一部分。我 我认为@token有问题。但是我找不到关于它的任何东西,也找不到 把它弄明白 有人知道我做错了什么吗 THNX 这是我的剧本: if not exist input.bat ( echo @echo off > input.bat echo title Input >> input.bat echo :set >> input.bat echo MODE CON: COLS=29 L

输出不是我期望得到的。。。尤其是输出的第一部分。我

我认为@token有问题。但是我找不到关于它的任何东西,也找不到

把它弄明白

有人知道我做错了什么吗

THNX

这是我的剧本:

if not exist input.bat (
    echo @echo off > input.bat
    echo title Input >> input.bat
    echo :set >> input.bat
    echo MODE CON: COLS=29 LINES=5 >> input.bat
    echo :loop >> input.bat
    echo cls >> input.bat
    echo echo Gebruik de wasd toetsen >> input.bat
    echo echo om te bewegen >> input.bat
    echo echo a/Left d/Right >> input.bat
    echo choice /c:wscradp /n >> input.bat
    echo if ERRORLEVEL 6 ( >> input.bat
    echo echo d^>action.txt >> input.bat
    echo goto loop) >> input.bat
    echo if ERRORLEVEL 5 ( >> input.bat
    echo echo a^>action.txt >> input.bat
    echo goto loop) >> input.bat
    echo if ERRORLEVEL 4 ( >> input.bat
    echo echo r^>action.txt >> input.bat
    echo goto loop) >> input.bat
    echo if ERRORLEVEL 3 ( >> input.bat
    echo    taskkill /f /im cmd.exe >> input.bat
    echo    exit >> input.bat
    echo ) >> input.bat
    echo if ERRORLEVEL 2 ( >> input.bat
    echo echo s^>action.txt >> input.bat
    echo goto loop) >> input.bat
    echo if ERRORLEVEL 1 echo w^>action.txt >> input.bat
    echo goto loop >> input.bat
)
这是input.bat不存在时的输出(文件input.bat):

goto loop
if ERRORLEVEL 5 ( 
echo a>action.txt 
goto loop) 
if ERRORLEVEL 4 ( 
echo r>action.txt 
goto loop) 
if ERRORLEVEL 3 ( 
    taskkill /f /im cmd.exe 
    exit 
) 
if ERRORLEVEL 2 ( 
echo s>action.txt 
goto loop) 
if ERRORLEVEL 1 echo w>action.txt 
goto loop 
也必须使用
^
进行转义

在命令提示窗口中输入
cmd.exe/?
的最后一页包含特殊字符列表,这些字符在批处理文件中具有特殊意义,因此如果不在双引号字符串中,则需要将转义字符解释为文字字符

if not exist input.bat (
    echo @echo off > input.bat
    echo title Input >> input.bat
    echo :set >> input.bat
    echo MODE CON: COLS=29 LINES=5 >> input.bat
    echo :loop >> input.bat
    echo cls >> input.bat
    echo echo Gebruik de wasd toetsen >> input.bat
    echo echo om te bewegen >> input.bat
    echo echo a/Left d/Right >> input.bat
    echo choice /c:wscradp /n >> input.bat
    echo if ERRORLEVEL 6 ^( >> input.bat
    echo echo d^>action.txt >> input.bat
    echo goto loop^) >> input.bat
    echo if ERRORLEVEL 5 ^( >> input.bat
    echo echo a^>action.txt >> input.bat
    echo goto loop^) >> input.bat
    echo if ERRORLEVEL 4 ^( >> input.bat
    echo echo r^>action.txt >> input.bat
    echo goto loop^) >> input.bat
    echo if ERRORLEVEL 3 ^( >> input.bat
    echo    taskkill /f /im cmd.exe >> input.bat
    echo    exit >> input.bat
    echo ^) >> input.bat
    echo if ERRORLEVEL 2 ^( >> input.bat
    echo echo s^>action.txt >> input.bat
    echo goto loop^) >> input.bat
    echo if ERRORLEVEL 1 echo w^>action.txt >> input.bat
    echo goto loop >> input.bat
)
那就更好了

if not exist input.bat (
    echo @echo off> input.bat
    echo title Input>> input.bat
    echo :set>> input.bat
    echo MODE CON: COLS=29 LINES=^5>> input.bat
    echo :loop>> input.bat
    echo cls>> input.bat
    echo echo Gebruik de wasd toetsen>> input.bat
    echo echo om te bewegen>> input.bat
    echo echo a/Left d/Right>> input.bat
    echo choice /c:wscradp /n>> input.bat
    echo if ERRORLEVEL 6 ^(>> input.bat
    echo echo d^>action.txt>> input.bat
    echo goto loop^)>> input.bat
    echo if ERRORLEVEL 5 ^(>> input.bat
    echo echo a^>action.txt>> input.bat
    echo goto loop^)>> input.bat
    echo if ERRORLEVEL 4 ^(>> input.bat
    echo echo r^>action.txt>> input.bat
    echo goto loop^)>> input.bat
    echo if ERRORLEVEL 3 ^(>> input.bat
    echo    taskkill /f /im cmd.exe>> input.bat
    echo    exit>> input.bat
    echo ^)>> input.bat
    echo if ERRORLEVEL 2 ^(>> input.bat
    echo echo s^>action.txt>> input.bat
    echo goto loop^)>> input.bat
    echo if ERRORLEVEL 1 echo w^>action.txt>> input.bat
    echo goto loop>> input.bat
)

此版本在
>>
中没有剩余空间,避免了在每一行创建的input.bat中都有一个尾随空格。要使此版本适用于所有行,必须在第5行中转义
5
,否则将解释
5>
,而不是将字符5追加到文件中。

这是创建脚本的一种更具可读性的方法:

打开的括号不需要转义。
您可能还更喜欢使用
echo(
),因为它更能抵抗来自各种前导字符的错误,而且速度更快

@echo off
if not exist input.bat (
    (
    echo @echo off
    echo title Input
    echo :set
    echo MODE CON: COLS=29 LINES=5
    echo :loop
    echo cls
    echo echo Gebruik de wasd toetsen
    echo echo om te bewegen
    echo echo a/Left d/Right
    echo choice /c:wscradp /n
    echo if ERRORLEVEL 6 (
    echo echo d^>action.txt
    echo goto loop^)
    echo if ERRORLEVEL 5 (
    echo echo a^>action.txt
    echo goto loop^)
    echo if ERRORLEVEL 4 (
    echo echo r^>action.txt
    echo goto loop^)
    echo if ERRORLEVEL 3 (
    echo    taskkill /f /im cmd.exe
    echo    exit
    echo ^)
    echo if ERRORLEVEL 2 (
    echo echo s^>action.txt
    echo goto loop^)
    echo if ERRORLEVEL 1 echo w^>action.txt
    echo goto loop
    )>input.bat
)