【问题标题】:How do I echo ASCII art that contains special characters in a batch file?如何回显批处理文件中包含特殊字符的 ASCII 艺术作品?
【发布时间】:2013-11-07 16:29:40
【问题描述】:

所以.. 这是(无论如何对我而言)该程序最重要的功能。我需要这个来工作。请不要笑..(好吧,你可以笑)但是当我的程序出错时,我希望它显示这个:

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

回显每一行不起作用...

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           /            \              \   \ 

我假设这是因为文本中的符号。有什么办法解决吗?还是我需要放弃“DOH”屏幕?

【问题讨论】:

    标签: batch-file cmd escaping symbols ascii-art


    【解决方案1】:

    在您的脚本中包含以下内容:

    :::
    :::              _ _,---._
    :::           ,-','       `-.___
    :::          /-;'               `._
    :::         /\/          ._   _,'o \
    :::        ( /\       _,--'\,','"`. )
    :::         |\      ,'o     \'    //\
    :::         |      \        /   ,--'""`-.
    :::         :       \_    _/ ,-'         `-._
    :::          \        `--'  /                )
    :::           `.  \`._    ,'     ________,','
    :::             .--`     ,'  ,--` __\___,;'
    :::              \`.,-- ,' ,`_)--'  /`.,'
    :::               \( ;  | | )      (`-/
    :::                 `--'| |)       |-/
    :::                   | | |        | |
    :::                   | | |,.,-.   | |_
    :::                   | `./ /   )---`  )
    :::                  _|  /    ,',   ,-'
    :::                 ,'|_(    /-<._,' |--,
    :::                 |    `--'---.     \/ \
    :::                 |          / \    /\  \
    :::               ,-^---._     |  \  /  \  \
    :::            ,-'        \----'   \/    \--`.
    :::           /            \              \   \
    :::
    
    for /f "delims=: tokens=*" %%A in ('findstr /b ::: "%~f0"') do @echo(%%A
    

    图像可以放置在脚本中的任何位置。它不需要靠近 FOR 语句。我选择:::作为每个图像行的区分标签,因为:用于普通标签,::经常用作注释。

    2014 年 10 月 22 日更新

    使用我的REPL.BAT utility 有一个更简单的解决方案 - 一个混合 JScript/批处理脚本,它在标准输入上执行正则表达式搜索/替换并将结果写入标准输出。只需将以下行替换上面的 FOR 语句:

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

    REPL.BAT 是一个纯脚本,可​​以在从 XP 开始的任何 Windows 机器上运行。完整的文档嵌入在脚本中。此解决方案使用 A 选项仅打印已更改的行。

    【讨论】:

      【解决方案2】:

      将图像存储在文件 (doh.txt) 中。然后在批处理文件中type doh.txt

      【讨论】:

      • 感谢您的快速回复。不过,我真的更希望它在 cmd 提示符中加载 ASCII,因为它会在出错后提示用户输入。
      • @user2863294 - 你的评论对我来说没有意义。您的批处理脚本可以在使用 TYPE 将文件内容打印到屏幕后简单地提示用户出错。
      • 哦!我在平板电脑上,我没有意识到“类型”是命令的一部分!太棒了!
      【解决方案3】:
      cat << "EOF"
                _ _,---._
             ,-','       `-.___
            /-;'               `._
           /\/          ._   _,'o \
          ( /\       _,--'\,','"`. )
           |\      ,'o     \'    //\
           |      \        /   ,--'""`-.
           :       \_    _/ ,-'         `-._
            \        `--'  /                )
             `.  \`._    ,'     ________,','
               .--`     ,'  ,--` __\___,;'
                \`.,-- ,' ,`_)--'  /`.,'
                 \( ;  | | )      (`-/
                   `--'| |)       |-/
                     | | |        | |
                     | | |,.,-.   | |_
                     | `./ /   )---`  )
                    _|  /    ,',   ,-'
                   ,'|_(    /-<._,' |--,
                   |    `--'---.     \/ \
                   |          / \    /\  \
                 ,-^---._     |  \  /  \  \
              ,-'        \----'   \/    \--`.
             /            \              \   \
      EOF
      

      【讨论】:

        【解决方案4】:

        您需要转义特殊字符(例如|,用于管道重定向)才能工作。

        但是,当使用echo 时,并非所有特殊批处理字符都需要转义,因为有些字符被解释为文本。你仍然需要逃跑的,以及如何逃跑的,是:

        % = %%

        ^ = ^^

        &amp; = ^&amp;

        &lt; = ^&lt;

        &gt; = ^&gt;

        | = ^|

        而且,如果启用延迟扩展:

        ! = ^^!

        【讨论】:

          【解决方案5】:
          echo this one works
          echo '                ***     ***
          echo                *     * *     *
          echo                *    *   *    *
          echo                 *** *    ****
          echo                   *       *
          echo                  *  0   0  *
          echo                  *    !    *
          echo                  *         *
          echo                  *   ~~~   *
          echo                  *         *
          echo            ======           ======
          echo            ======           ======
          echo      ======                       ======
          echo      ======                       ======
          

          【讨论】:

          • 这是 OP 指定的吗?
          猜你喜欢
          • 2016-06-21
          • 2016-02-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-02-11
          • 2018-03-13
          相关资源
          最近更新 更多