ASCII 艺术的批处理代码问题:"The syntax of the command is incorrect"
Batch code issue with ASCII art: "The syntax of the command is incorrect"
我在解决有关 ASCII 艺术的代码问题时遇到了很多麻烦,有问题的行如下:
PING localhost -n 1 >NUL
echo ' ----' ""-. \/ //
PING localhost -n 1 >NUL
每次我到达它时,它都会终止 cmd 提示符并抛出 The syntax of the command is incorrect
- 我怀疑我在不知不觉中选择了指定行中几个字符的错误顺序,并且不小心开始了从echo 命令较早。
正如您所注意到的,我已经通过第一个障碍逃脱了,这是第一行代码,但是 pause
命令之后的障碍让我感到难过。
我想知道是什么符号或符号顺序导致了这种情况,以便我可以改进我的其余代码。我的代码是:
echo ___^<__^(^|^)_ ""-/\//\//
pause
PING localhost -n 1 >NUL
echo ' ----' ""-. \/ //
PING localhost -n 1 >NUL
echo ) ] |
PING localhost -n 1 >NUL
echo ____..-' . / )
PING localhost -n 1 >NUL
echo ,-"" __.,' / ___ /,
PING localhost -n 1 >NUL
echo / ,--""/ / / /,-"" """-. ,'/
PING localhost -n 1 >NUL
echo [ ( / /\/ / ,.---,_ ._ _,-','
PING localhost -n 1 >NUL
echo \ -./ / / / / -._ """ ,-'
PING localhost -n 1 >NUL
echo -._ / / / /_,' ""--"
PING localhost -n 1 >NUL
echo "/ / / /"
PING localhost -n 1 >NUL
echo / /\/ /
PING localhost -n 1 >NUL
echo / / / /
PING localhost -n 1 >NUL
echo / |,' /
PING localhost -n 1 >NUL
echo / / |
PING localhost -n 1 >NUL
echo [ // ,'
PING localhost -n 1 >NUL
echo | / ,'
PING localhost -n 1 >NUL
echo |/.-'
PING localhost -n 1 >NUL
echo \-'`
timeout 3
:PASS
ECHO Slyshoiev en dyevet rhyzhok.
最好的方法是了解哪些字符需要转义。对于你的 'so called' 艺术,你只需要转义 <
和 |
字符.
请删除第一行的两个转义字符 ^
、(也称为脱字符),在括号 )
和 (
之前。 如果您的作品在括号内,您只需要转义右括号 )
。
然后只需在其他五行中添加缺少的插入符,在剩余的五个管道字符前面,|
.
示例:
@Echo Off
Set "Delay=PathPing LocalHost -n -q 1 -p 250 >Nul"
Echo(
Echo ___^<__(^|)_ ""-/\//\//
%Delay%
Echo ' ----' ""-. \/ //
%Delay%
Echo ) ] ^|
%Delay%
Echo ____..-' . / )
%Delay%
Echo ,-"" __.,' / ___ /,
%Delay%
Echo / ,--""/ / / /,-"" """-. ,'/
%Delay%
Echo [ ( / /\/ / ,.---,_ ._ _,-','
%Delay%
Echo \ -./ / / / / -._ """ ,-'
%Delay%
Echo -._ / / / /_,' ""--"
%Delay%
Echo "/ / / /"
%Delay%
Echo / /\/ /
%Delay%
Echo / / / /
%Delay%
Echo / ^|,' /
%Delay%
Echo / / ^|
%Delay%
Echo [ // ,'
%Delay%
Echo ^| / ,'
%Delay%
Echo ^|/.-'
%Delay%
Echo \-'`
Timeout 3 /NoBreak>Nul
:PASS
Echo Slyshoiev en dyevet rhyzhok.
Pause>Nul
上面我用的是PathPing
而不是Ping
,因为它似乎可以更好地控制延迟速度,将250
调整为可能的[=21] =] 和 500
以查看速度 的差异。最后一行只是为了让您看到所有内容,您可以在对输出满意后将其删除。
在echo
命令中,需要转义的字符有<>|^&
、启用延迟扩展时的!
(带^^!
)和)
当 echo
在括号内时。
在你的代码中,你有字符<)|
;你不在括号内,所以你只需要转义字符 <|
。您的代码应如下所示:
echo ___^<_(^|)_ ""-/\//\//\
pause
PING localhost -n 1 >NUL
echo ' ----' ""-. \/ //
PING localhost -n 1 >NUL
echo ) ] ^|
PING localhost -n 1 >NUL
echo ____..-' . /
PING localhost -n 1 >NUL
echo ,-"" __.,' / ___ /,
PING localhost -n 1 >NUL
echo / ,--""/ / / /,-"" """-. ,'/
PING localhost -n 1 >NUL
echo [ ( / /\/ / ,.---,_ ._ _,-','
PING localhost -n 1 >NUL
echo \ -./ / / / / -._ """ ,-'
PING localhost -n 1 >NUL
echo -._ / / / /_,' ""--"
PING localhost -n 1 >NUL
echo "/ / / /"
PING localhost -n 1 >NUL
echo / /\/ /
PING localhost -n 1 >NUL
echo / / / /
PING localhost -n 1 >NUL
echo / ^|,' /
PING localhost -n 1 >NUL
echo / / ^|
PING localhost -n 1 >NUL
echo [ // ,'
PING localhost -n 1 >NUL
echo ^| / ,'
PING localhost -n 1 >NUL
echo ^|/.-'
PING localhost -n 1 >NUL
echo \-'`
timeout 3
:PASS
ECHO Slyshoiev en dyevet rhyzhok.
注意:如果您不确定应该转义哪些字符,将它们全部转义并测试您的代码是否有效。然后开始删除一些转义字符(可选)并测试结果!它必须正常工作!
有趣的参考文献:
- https://www.robvanderwoude.com/escapechars.php
- https://ss64.com/nt/syntax-esc.html
- Batch character escaping
我在解决有关 ASCII 艺术的代码问题时遇到了很多麻烦,有问题的行如下:
PING localhost -n 1 >NUL
echo ' ----' ""-. \/ //
PING localhost -n 1 >NUL
每次我到达它时,它都会终止 cmd 提示符并抛出 The syntax of the command is incorrect
- 我怀疑我在不知不觉中选择了指定行中几个字符的错误顺序,并且不小心开始了从echo 命令较早。
正如您所注意到的,我已经通过第一个障碍逃脱了,这是第一行代码,但是 pause
命令之后的障碍让我感到难过。
我想知道是什么符号或符号顺序导致了这种情况,以便我可以改进我的其余代码。我的代码是:
echo ___^<__^(^|^)_ ""-/\//\//
pause
PING localhost -n 1 >NUL
echo ' ----' ""-. \/ //
PING localhost -n 1 >NUL
echo ) ] |
PING localhost -n 1 >NUL
echo ____..-' . / )
PING localhost -n 1 >NUL
echo ,-"" __.,' / ___ /,
PING localhost -n 1 >NUL
echo / ,--""/ / / /,-"" """-. ,'/
PING localhost -n 1 >NUL
echo [ ( / /\/ / ,.---,_ ._ _,-','
PING localhost -n 1 >NUL
echo \ -./ / / / / -._ """ ,-'
PING localhost -n 1 >NUL
echo -._ / / / /_,' ""--"
PING localhost -n 1 >NUL
echo "/ / / /"
PING localhost -n 1 >NUL
echo / /\/ /
PING localhost -n 1 >NUL
echo / / / /
PING localhost -n 1 >NUL
echo / |,' /
PING localhost -n 1 >NUL
echo / / |
PING localhost -n 1 >NUL
echo [ // ,'
PING localhost -n 1 >NUL
echo | / ,'
PING localhost -n 1 >NUL
echo |/.-'
PING localhost -n 1 >NUL
echo \-'`
timeout 3
:PASS
ECHO Slyshoiev en dyevet rhyzhok.
最好的方法是了解哪些字符需要转义。对于你的 'so called' 艺术,你只需要转义 <
和 |
字符.
请删除第一行的两个转义字符 ^
、(也称为脱字符),在括号 )
和 (
之前。 如果您的作品在括号内,您只需要转义右括号 )
。
然后只需在其他五行中添加缺少的插入符,在剩余的五个管道字符前面,|
.
示例:
@Echo Off
Set "Delay=PathPing LocalHost -n -q 1 -p 250 >Nul"
Echo(
Echo ___^<__(^|)_ ""-/\//\//
%Delay%
Echo ' ----' ""-. \/ //
%Delay%
Echo ) ] ^|
%Delay%
Echo ____..-' . / )
%Delay%
Echo ,-"" __.,' / ___ /,
%Delay%
Echo / ,--""/ / / /,-"" """-. ,'/
%Delay%
Echo [ ( / /\/ / ,.---,_ ._ _,-','
%Delay%
Echo \ -./ / / / / -._ """ ,-'
%Delay%
Echo -._ / / / /_,' ""--"
%Delay%
Echo "/ / / /"
%Delay%
Echo / /\/ /
%Delay%
Echo / / / /
%Delay%
Echo / ^|,' /
%Delay%
Echo / / ^|
%Delay%
Echo [ // ,'
%Delay%
Echo ^| / ,'
%Delay%
Echo ^|/.-'
%Delay%
Echo \-'`
Timeout 3 /NoBreak>Nul
:PASS
Echo Slyshoiev en dyevet rhyzhok.
Pause>Nul
上面我用的是PathPing
而不是Ping
,因为它似乎可以更好地控制延迟速度,将250
调整为可能的[=21] =] 和 500
以查看速度 的差异。最后一行只是为了让您看到所有内容,您可以在对输出满意后将其删除。
在echo
命令中,需要转义的字符有<>|^&
、启用延迟扩展时的!
(带^^!
)和)
当 echo
在括号内时。
在你的代码中,你有字符<)|
;你不在括号内,所以你只需要转义字符 <|
。您的代码应如下所示:
echo ___^<_(^|)_ ""-/\//\//\
pause
PING localhost -n 1 >NUL
echo ' ----' ""-. \/ //
PING localhost -n 1 >NUL
echo ) ] ^|
PING localhost -n 1 >NUL
echo ____..-' . /
PING localhost -n 1 >NUL
echo ,-"" __.,' / ___ /,
PING localhost -n 1 >NUL
echo / ,--""/ / / /,-"" """-. ,'/
PING localhost -n 1 >NUL
echo [ ( / /\/ / ,.---,_ ._ _,-','
PING localhost -n 1 >NUL
echo \ -./ / / / / -._ """ ,-'
PING localhost -n 1 >NUL
echo -._ / / / /_,' ""--"
PING localhost -n 1 >NUL
echo "/ / / /"
PING localhost -n 1 >NUL
echo / /\/ /
PING localhost -n 1 >NUL
echo / / / /
PING localhost -n 1 >NUL
echo / ^|,' /
PING localhost -n 1 >NUL
echo / / ^|
PING localhost -n 1 >NUL
echo [ // ,'
PING localhost -n 1 >NUL
echo ^| / ,'
PING localhost -n 1 >NUL
echo ^|/.-'
PING localhost -n 1 >NUL
echo \-'`
timeout 3
:PASS
ECHO Slyshoiev en dyevet rhyzhok.
注意:如果您不确定应该转义哪些字符,将它们全部转义并测试您的代码是否有效。然后开始删除一些转义字符(可选)并测试结果!它必须正常工作!
有趣的参考文献:
- https://www.robvanderwoude.com/escapechars.php
- https://ss64.com/nt/syntax-esc.html
- Batch character escaping