Windows批处理:Can';我不喜欢艺术_|_

Windows批处理:Can';我不喜欢艺术_|_,windows,batch-file,cmd,escaping,ascii-art,Windows,Batch File,Cmd,Escaping,Ascii Art,我制作了ASCII艺术,我试图在打开.bat文件时显示它。这是我拥有的(绝大多数是基本的)代码。我在网上查过了,没有找到任何能帮助我的东西。有什么建议吗 @echo off echo __ __ _______ _____ _____ __ __ echo / /_/ / / ___ / / _ / / _ / / /_/ / echo / __ / / /__/ / / ____/ / ___/ \

我制作了ASCII艺术,我试图在打开.bat文件时显示它。这是我拥有的(绝大多数是基本的)代码。我在网上查过了,没有找到任何能帮助我的东西。有什么建议吗

@echo off
echo    __  __    _______    _____     _____     __  __
echo   / /_/ /   / ___  /   /  _  /   /  _  /   / /_/  /
echo  / __  /   / /__/ /   / ____/   /  ___/     \   /
echo /_/ /_/   /_/  /_/   /_/       /_/          /__/
echo    _____          _____     _______  __  __
echo   /  _ /  ____   /  _   /  / ___  / / /_/  /
echo  /  _ /  /___/  /  _/  /  / /__/ /  \    /
echo /____/         /______/  /_/  /_/    /__/
pause
echo  
echo     #      #        #      #         #
echo .__|_|____|_|______|_|____|_|_______|_|____.
echo ############################################
echo |                                          |
echo ############################################
echo ############################################
echo |__________________________________________|
pause
我已经可以看到自己哭了,因为我没有注意到一个小错误


它在这一行崩溃:
echo.\uuu124; 124; 124; 124; 124; 124; 124; 124; 124; 124; 124; 124; 124; 124; 124; 124; 124; 124; 124; 124; 124; 124;
ASCII艺术与
echo
可能有点棘手,因为有几个字符是由处理器处理的

因此,要更正代码,应该如下所示:

@echo off
echo    __  __    _______    _____     _____     __  __
echo   / /_/ /   / ___  /   /  _  /   /  _  /   / /_/  /
echo  / __  /   / /__/ /   / ____/   /  ___/     \   /
echo /_/ /_/   /_/  /_/   /_/       /_/          /__/
echo    _____          _____     _______  __  __
echo   /  _ /  ____   /  _   /  / ___  / / /_/  /
echo  /  _ /  /___/  /  _/  /  / /__/ /  \    /
echo /____/         /______/  /_/  /_/    /__/
pause
echo(
echo     #      #        #      #         #      
echo .__^|_^|____^|_^|______^|_^|____^|_^|_______^|_^|____.
echo ############################################
echo ^|                                          ^|
echo ############################################
echo ############################################
echo ^|__________________________________________^|
pause
您使用的
|
字符是一个特殊字符:它构成了一个所谓的“管道”,允许将命令的输出馈送到另一个管道中(例如:
键入“file.txt”|查找“Hello”
)。在您的代码中,
\uu
被视为一个命令,但该命令不存在,因此它失败(它尝试将
echo.\u
的输出,即
\u
输入到命令
\u
)。要克服这个问题,您需要对每个
|
进行转义,例如
^
^
使下面的字符失去其特殊意义)


还有更多特殊字符,如
&
,…,以及
^
本身。因此,如果我需要编写这样的代码,我会将ASCII艺术文本导出到外部文件中,并使用
type
命令显示其内容,如下所示:

恭喜.txt
cake.txt
: 批处理脚本: 因此,您永远不会遇到任何文本字符的问题。上面的脚本要求
*.txt
文件与脚本本身位于同一目录中


但是,如果您确实希望将所有内容都包含在批处理文件中,我会考虑以下选项:

您可以定义类似数组的变量,并使用
set
来显示这些变量,前提是这些变量名未在其他地方使用:

@echo off

set "CONGRATS_00=.   __  __    _______    _____     _____     __  __"
set "CONGRATS_01=.  / /_/ /   / ___  /   /  _  /   /  _  /   / /_/  /"
set "CONGRATS_02=. / __  /   / /__/ /   / ____/   /  ___/     \   /"
set "CONGRATS_03=./_/ /_/   /_/  /_/   /_/       /_/          /__/"
set "CONGRATS_04=.   _____          _____     _______  __  __"
set "CONGRATS_05=.  /  _ /  ____   /  _   /  / ___  / / /_/  /"
set "CONGRATS_06=. /  _ /  /___/  /  _/  /  / /__/ /  \    /"
set "CONGRATS_07=./____/         /______/  /_/  /_/    /__/"

set "CAKE_00=.    #      #        #      #         #      "
set "CAKE_01=..__|_|____|_|______|_|____|_|_______|_|____."
set "CAKE_02=.############################################"
set "CAKE_03=.|                                          |"
set "CAKE_04=.############################################"
set "CAKE_05=.############################################"
set "CAKE_06=.|__________________________________________|"

call :SUB "CONGRATS"
> nul pause
echo(
call :SUB "CAKE"
> nul pause
exit /B

:SUB "name"
for /F "delims=" %%V in ('
    set "%~1_"
') do (
    set "VALUE=%%V"
    setlocal EnableDelayedExpansion
    echo(!VALUE:*.=!
    endlocal
)
exit /B
或者,如果您不想冒任何变量值被某些其他代码部分覆盖的风险,可以将ASCII art直接嵌入批处理文件中,并使用
for/F
循环读取:

@echo off
goto :BEGIN

:::congrats.   __  __    _______    _____     _____     __  __
:::congrats.  / /_/ /   / ___  /   /  _  /   /  _  /   / /_/  /
:::congrats. / __  /   / /__/ /   / ____/   /  ___/     \   /
:::congrats./_/ /_/   /_/  /_/   /_/       /_/          /__/
:::congrats.   _____          _____     _______  __  __
:::congrats.  /  _ /  ____   /  _   /  / ___  / / /_/  /
:::congrats. /  _ /  /___/  /  _/  /  / /__/ /  \    /
:::congrats./____/         /______/  /_/  /_/    /__/

:::cake.    #      #        #      #         #      
:::cake..__|_|____|_|______|_|____|_|_______|_|____.
:::cake.############################################
:::cake.|                                          |
:::cake.############################################
:::cake.############################################
:::cake.|__________________________________________|

:BEGIN
set "BATCH=%~f0"
call :SUB "congrats"
> nul pause
echo(
call :SUB "cake"
> nul pause
exit /B

:SUB "name"
for /F "delims=" %%L in ('
    findstr /L /I /B /C:":::%~1." "%BATCH%"
') do (
    set "LINE=%%L"
    setlocal EnableDelayedExpansion
    echo(!LINE:*.=!
    endlocal
)
exit /B

我要做的是使用

rem
命令绘制出每一行,生成ASCII艺术并使其更美观,或者您可以始终执行以下操作:

type

命令并引用一个包含文本的Python文件。

是的,我知道这是一个可怕的礼物:)。
字符构成了一个所谓的“管道”,它允许将命令的输出输入到另一个文件中,例如:
键入“file.txt”|查找“Hello”
;在您的代码中,
\uu
被视为不存在的命令,因此它失败(它尝试将
echo.\u
的输出,即
\u
馈送到
\u
);要克服这一点,您需要对每一个
进行转义,例如
^
^
使以下字符失去其特殊含义)。。。。。。或者使用另一种方法来显示特殊字符,比如用引号括起来的方法:
set/P“=。u124; u124; u124; u124; u124 124; u124 124; u124 124; u124 124; u124 124; u124; u124 124; u124 124; u124; u124 U124; u124; u124uUfl u124|。@aschipfl方法非常有效。我完全忘了键入命令:/谢谢你们!顺便说一句,试着想出一个对你的问题足够具体的标题——“回音错误”是非常模糊的。如果您在询问之前将其缩小为一个字符,并且可以在标题中添加类似“不能用|呼应ascii艺术”的内容,那就更好了。也许您可能对或。。。
@echo off
goto :BEGIN

:::congrats.   __  __    _______    _____     _____     __  __
:::congrats.  / /_/ /   / ___  /   /  _  /   /  _  /   / /_/  /
:::congrats. / __  /   / /__/ /   / ____/   /  ___/     \   /
:::congrats./_/ /_/   /_/  /_/   /_/       /_/          /__/
:::congrats.   _____          _____     _______  __  __
:::congrats.  /  _ /  ____   /  _   /  / ___  / / /_/  /
:::congrats. /  _ /  /___/  /  _/  /  / /__/ /  \    /
:::congrats./____/         /______/  /_/  /_/    /__/

:::cake.    #      #        #      #         #      
:::cake..__|_|____|_|______|_|____|_|_______|_|____.
:::cake.############################################
:::cake.|                                          |
:::cake.############################################
:::cake.############################################
:::cake.|__________________________________________|

:BEGIN
set "BATCH=%~f0"
call :SUB "congrats"
> nul pause
echo(
call :SUB "cake"
> nul pause
exit /B

:SUB "name"
for /F "delims=" %%L in ('
    findstr /L /I /B /C:":::%~1." "%BATCH%"
') do (
    set "LINE=%%L"
    setlocal EnableDelayedExpansion
    echo(!LINE:*.=!
    endlocal
)
exit /B
rem
type