How do I echo ASCII art that contains special characters in a batch file?

左心房为你撑大大i 提交于 2019-12-10 00:50:36

问题


So.. This is (to me anyway) the most important feature of this program. I need this to work. Please don't laugh.. (okay you can laugh) but when my program errors, I want it to display this:

          _ _,---._ 
       ,-','       `-.___ 
      /-;'               `._ 
     /\/          ._   _,'o \ 
    ( /\       _,--'\,','"`. ) 
     |\      ,'o     \'    //\ 
     |      \        /   ,--'""`-. 
     :       \_    _/ ,-'         `-._ 
      \        `--'  /                ) 
       `.  \`._    ,'     ________,',' 
         .--`     ,'  ,--` __\___,;' 
          \`.,-- ,' ,`_)--'  /`.,' 
           \( ;  | | )      (`-/ 
             `--'| |)       |-/ 
               | | |        | | 
               | | |,.,-.   | |_ 
               | `./ /   )---`  ) 
              _|  /    ,',   ,-' 
             ,'|_(    /-<._,' |--, 
             |    `--'---.     \/ \ 
             |          / \    /\  \ 
           ,-^---._     |  \  /  \  \ 
        ,-'        \----'   \/    \--`. 
       /            \              \   \ 

Echoing each line doesn't work...

echo              _ _,---._ 
echo           ,-','       `-.___ 
echo          /-;'               `._ 
echo         /\/          ._   _,'o \ 
echo        ( /\       _,--'\,','"`. ) 
echo         |\      ,'o     \'    //\ 
echo         |      \        /   ,--'""`-. 
echo         :       \_    _/ ,-'         `-._ 
echo          \        `--'  /                ) 
echo           `.  \`._    ,'     ________,',' 
echo             .--`     ,'  ,--` __\___,;' 
echo              \`.,-- ,' ,`_)--'  /`.,' 
echo               \( ;  | | )      (`-/ 
echo                 `--'| |)       |-/ 
echo                   | | |        | | 
echo                   | | |,.,-.   | |_ 
echo                   | `./ /   )---`  ) 
echo                  _|  /    ,',   ,-' 
echo                 ,'|_(    /-<._,' |--, 
echo                 |    `--'---.     \/ \ 
echo                 |          / \    /\  \ 
echo               ,-^---._     |  \  /  \  \ 
echo            ,-'        \----'   \/    \--`. 
echo           /            \              \   \ 

I'm assuming this is because of the symbols in the text. Any way to fix it? Or do I need to give up on the "DOH" screen?


回答1:


Store image in a file (doh.txt). Then type doh.txt in the batch file.




回答2:


Include the following in your script:

:::
:::              _ _,---._
:::           ,-','       `-.___
:::          /-;'               `._
:::         /\/          ._   _,'o \
:::        ( /\       _,--'\,','"`. )
:::         |\      ,'o     \'    //\
:::         |      \        /   ,--'""`-.
:::         :       \_    _/ ,-'         `-._
:::          \        `--'  /                )
:::           `.  \`._    ,'     ________,','
:::             .--`     ,'  ,--` __\___,;'
:::              \`.,-- ,' ,`_)--'  /`.,'
:::               \( ;  | | )      (`-/
:::                 `--'| |)       |-/
:::                   | | |        | |
:::                   | | |,.,-.   | |_
:::                   | `./ /   )---`  )
:::                  _|  /    ,',   ,-'
:::                 ,'|_(    /-<._,' |--,
:::                 |    `--'---.     \/ \
:::                 |          / \    /\  \
:::               ,-^---._     |  \  /  \  \
:::            ,-'        \----'   \/    \--`.
:::           /            \              \   \
:::

for /f "delims=: tokens=*" %%A in ('findstr /b ::: "%~f0"') do @echo(%%A

The image could be placed anywhere within the script. It does not need to be near the FOR statement. I chose ::: as a distinguishing label for each image line because : is used for normal labels, and :: is frequently used as a comment.

2014-10-22 Update

There is an even simpler solution using my REPL.BAT utility - a hybrid JScript/batch script that performs a regex search/replace on stdin and writes the result to stdout. Simply substitute the following line for the FOR statement above:

call repl "^:::" "" a <"%~f0"

REPL.BAT is pure script that will run on any Windows machine from XP onward. Full documentation is embedded within the script. This solution uses the A option to only print lines that were altered.




回答3:


You need to escape special characters (such as |, used for pipe redirection) in order for it to work.

However, when using echo not all special batch characters need to be escaped, as some as interpreted as text. The ones you still need to escape, and how to escape them, are:

% = %%

^ = ^^

& = ^&

< = ^<

> = ^>

| = ^|

And, if delayed expansion is enabled:

! = ^^!




回答4:


cat << "EOF"
          _ _,---._
       ,-','       `-.___
      /-;'               `._
     /\/          ._   _,'o \
    ( /\       _,--'\,','"`. )
     |\      ,'o     \'    //\
     |      \        /   ,--'""`-.
     :       \_    _/ ,-'         `-._
      \        `--'  /                )
       `.  \`._    ,'     ________,','
         .--`     ,'  ,--` __\___,;'
          \`.,-- ,' ,`_)--'  /`.,'
           \( ;  | | )      (`-/
             `--'| |)       |-/
               | | |        | |
               | | |,.,-.   | |_
               | `./ /   )---`  )
              _|  /    ,',   ,-'
             ,'|_(    /-<._,' |--,
             |    `--'---.     \/ \
             |          / \    /\  \
           ,-^---._     |  \  /  \  \
        ,-'        \----'   \/    \--`.
       /            \              \   \
EOF



回答5:


@echo off
echo              _ _,---._ 
echo           ,-','       `-.___ 
echo          /-;'               `._ 
echo         /\/          ._   _,'o \ 
echo        ( /\       _,--'\,','"`. ) 
echo         ^|\      ,'o     \'    //\ 
echo         ^|      \        /   ,--'""`-. 
echo         :       \_    _/ ,-'         `-._ 
echo          \        `--'  /                ) 
echo           `.  \`._    ,'     ________,',' 
echo             .--`     ,'  ,--` __\___,;' 
echo              \`.,-- ,' ,`_)--'  /`.,' 
echo               \^( ;  ^| ^| )      ^(`-/ 
echo                 `--'^| ^|^)       ^|-/ 
echo                   ^| ^| ^|        ^| ^| 
echo                   ^| ^| ^|,.,-.   ^| ^|_ 
echo                   ^| `./ /   )---`  ) 
echo                  _^|  /    ,',   ,-' 
echo                 ,'^|_(    /-^<._,' ^|--, 
echo                 ^|    `--'---.     \/ \ 
echo                 ^|          / \    /\  \ 
echo               ,-^---._     ^|  \  /  \  \ 
echo            ,-'        \----'   \/    \--`. 
echo           /            \              \   \ 

http://www.robvanderwoude.com/escapechars.php




回答6:


echo this one works
echo '                ***     ***
echo                *     * *     *
echo                *    *   *    *
echo                 *** *    ****
echo                   *       *
echo                  *  0   0  *
echo                  *    !    *
echo                  *         *
echo                  *   ~~~   *
echo                  *         *
echo            ======           ======
echo            ======           ======
echo      ======                       ======
echo      ======                       ======


来源:https://stackoverflow.com/questions/19642622/how-do-i-echo-ascii-art-that-contains-special-characters-in-a-batch-file

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!