Как воспроизвести ASCII-код, содержащий специальные символы в пакетном файле?


Итак.. Это (во всяком случае, для меня) самая важная особенность этой программы. Мне нужно, чтобы это сработало. Пожалуйста, не смейтесь.. (ладно, вы можете смеяться) но когда моя программа ошибается, я хочу, чтобы она отображала это:

          _ _,---._ 
       ,-','       `-.___ 
      /-;'               `._ 
     //          ._   _,'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"?
6 13

6 ответов:

Хранить изображение в файле (doh.формат txt). Затем type doh.txt в пакетном файле.

Включите в свой сценарий следующее:

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

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

Изображение может быть помещено в любом месте сценария. Он не должен быть рядом с утверждением FOR. Я выбрал ::: в качестве отличительной метки для каждой строки изображения, потому что : используется для обычных меток, а :: часто используется в качестве комментария.

2014-10-22 обновление

Есть еще более простое решение, используя мой REPL.Bat utility - гибридный JScript / пакетный скрипт, выполняющий регулярное выражение поиска/замены на stdin и записывает результат в stdout. Просто замените приведенное выше утверждение FOR следующей строкой:

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

РЕПЛ.BAT-это чистый скрипт, который будет работать на любой машине Windows, начиная с XP. Полная документация встроена в сценарий. Это решение использует опцию A только для печати измененных строк.

Вам нужно экранировать специальные символы (такие как |, используемые для перенаправления канала), чтобы он работал.

Однако при использовании echo не все специальные пакетные символы должны быть экранированы, так как некоторые из них интерпретируются как текст. Те, которые вам все еще нужно избежать, и как избежать их, являются:

% = %%

^ = ^^

& = ^&

< = ^<

> = ^>

| = ^|

И, если задержится расширение включено:

! = ^^!

cat << "EOF"
          _ _,---._
       ,-','       `-.___
      /-;'               `._
     /\/          ._   _,'o \
    ( /\       _,--'\,','"`. )
     |\      ,'o     \'    //\
     |      \        /   ,--'""`-.
     :       \_    _/ ,-'         `-._
      \        `--'  /                )
       `.  \`._    ,'     ________,','
         .--`     ,'  ,--` __\___,;'
          \`.,-- ,' ,`_)--'  /`.,'
           \( ;  | | )      (`-/
             `--'| |)       |-/
               | | |        | |
               | | |,.,-.   | |_
               | `./ /   )---`  )
              _|  /    ,',   ,-'
             ,'|_(    /-<._,' |--,
             |    `--'---.     \/ \
             |          / \    /\  \
           ,-^---._     |  \  /  \  \
        ,-'        \----'   \/    \--`.
       /            \              \   \
EOF
@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

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