输出不是我预期得到的......特别是输出的第一部分。我
认为@令牌出错了。但我无法找到任何关于它的东西而且不能
弄清楚。
有谁知道我做错了什么?
日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
答案 0 :(得分:1)
(
和)
也必须使用^
进行转义。
在命令提示符窗口中输入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附加到文件中。
答案 1 :(得分:1)
这是一种更易读的创建脚本的方法:
不需要转义开头括号
您可能还希望使用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
)