Командный процессор Windows и командные файлы существуют довольно давно, задолго до того, как была введена кодировка UTF-8, поэтому поддержка далеко не предоставлена.
В любом случае, я наконец нашел способ отобразить текст правильно - вот он:
@echo off
rem // Store current code page in a variable for later restore (optional):
for /F "tokens=2 delims=:" %%C in ('chcp') do set /A "$CP=%%C"
rem // Change code page to UTF-8 Unicode:
chcp 65001 > nul
rem // Write text into temporary file:
> "%TEMP%\temp.txt" (
echo/
echo ███ ▀▄ ▄ ██ ▄ ████▄ ▄ ▄ █ ▄███▄ ▄ ████▄
echo █ █ █ █ █ █ █ █ █ █ █ █ █▀ ▀ ▀▄ █ █ █
echo █ ▀ ▄ ▀█ █▄▄█ ██ █ █ █ ██ █ ██▀▀█ ██▄▄ █ ▀ █ █
echo █ ▄▀ █ █ █ █ █ █ ▀████ █ █ █ █ █ █▄ ▄▀ ▄ █ ▀████
echo ███ ▄▀ █ █ █ █ █ █ █ █ ▀███▀ █ ▀▄
echo █ █ ██ █ ██ ▀ ▀
echo ▀
)
rem /* Open a new instance of the Command Processor; inside this,
rem change code page to original IBM PC and type out the temporary file: */
cmd /C chcp 437 ^> nul ^& type "%TEMP%\temp.txt"
rem // Clean up temporary file:
del "%TEMP%\temp.txt"
rem // Restore original code page (optional):
chcp %$CP% > nul
Обратите внимание, что я тестировал его на 64-битной машине Windows 7 (SP1).
Это альтернативный способ не требует временного файла:
@echo off
rem // Store current code page in a variable for later restore (optional):
for /F "tokens=2 delims=:" %%C in ('chcp') do set /A "$CP=%%C"
rem // Change code page to UTF-8 Unicode:
chcp 65001 > nul
rem // Provide text in pseudo-comments (invalid labels):
::::
:::: ███ ▀▄ ▄ ██ ▄ ████▄ ▄ ▄ █ ▄███▄ ▄ ████▄
:::: █ █ █ █ █ █ █ █ █ █ █ █ █▀ ▀ ▀▄ █ █ █
:::: █ ▀ ▄ ▀█ █▄▄█ ██ █ █ █ ██ █ ██▀▀█ ██▄▄ █ ▀ █ █
:::: █ ▄▀ █ █ █ █ █ █ ▀████ █ █ █ █ █ █▄ ▄▀ ▄ █ ▀████
:::: ███ ▄▀ █ █ █ █ █ █ █ █ ▀███▀ █ ▀▄
:::: █ █ ██ █ ██ ▀ ▀
:::: ▀
rem /* Instantiate a `for /F` loop, which opens a new Command Processor instance;
rem inside this, change code page to original IBM PC, use `findstr` to extract
rem all lines from this batch file that begin with `::::` and print them with
rem the `::::` prefix removed: */
for /F "delims=:" %%T in ('chcp 437 ^> nul ^& findstr "^::::" "%~f0"') do echo(%%T
rem // Restore original code page (optional):
chcp %$CP% > nul
Я должен признать, что, к сожалению, (пока) не понимаю, зачем нужен еще один экземпляр cmd
.