运行 时出现批处理错误

Get A Batch Error When Running

当我 运行 在它关闭之前我只能看到几行,例如 _ 和一个黑色的批处理文件屏幕关闭。

|字符称为管道。它分离命令,将一个命令的输出推入另一个命令的输入。因为它们在批处理脚本中具有特殊含义,所以您不能只回显它们而不用插入符号转义它们,或者将它们设置为变量并通过延迟扩展进行检索。

下面是一个简单的转义示例:

@echo off
setlocal

echo                      _______             _____    _______              _______
echo \                /  ^|          ^|        /     \  /       \  ^|\    /^|  ^|
echo  \              /   ^|          ^|        ^|        ^|       ^|  ^| \  / ^|  ^|
echo   \            /    ^|_______   ^|        ^|        ^|       ^|  ^|  \/  ^|  ^|_______
echo    \    /\    /     ^|          ^|        ^|        ^|       ^|  ^|      ^|  ^|
echo     \  /  \  /      ^|          ^|        ^|        ^|       ^|  ^|      ^|  ^|
echo      \/    \/       ^|_______   ^|______  \_____/  \_______/  ^|      ^|  ^|_______
pause

这是一个延迟扩展的例子:

@echo off
setlocal enabledelayedexpansion
set "I=|"

echo                      _______             _____    _______              _______
echo \                /  !I!          !I!        /     \  /       \  !I!\    /!I!  !I!
echo  \              /   !I!          !I!        !I!        !I!       !I!  !I! \  / !I!  !I!
echo   \            /    !I!_______   !I!        !I!        !I!       !I!  !I!  \/  !I!  !I!_______
echo    \    /\    /     !I!          !I!        !I!        !I!       !I!  !I!      !I!  !I!
echo     \  /  \  /      !I!          !I!        !I!        !I!       !I!  !I!      !I!  !I!
echo      \/    \/       !I!_______   !I!______  \_____/  \_______/  !I!      !I!  !I!_______
pause

作为一个高级练习,如果你想让 figlet "WELCOME" 文本在源代码中保持可读,你可以使用 batch script heredoc:

@echo off
setlocal

call :heredoc welcome && goto end_welcome
                     _______             _____    _______              _______
\                /  |          |        /     \  /       \  |\    /|  |
 \              /   |          |        |        |       |  | \  / |  |
  \            /    |_______   |        |        |       |  |  \/  |  |_______
   \    /\    /     |          |        |        |       |  |      |  |
    \  /  \  /      |          |        |        |       |  |      |  |
     \/    \/       |_______   |______  \_____/  \_______/  |      |  |_______
:end_welcome
pause

goto :EOF

rem // 
:heredoc <uniqueIDX>
setlocal enabledelayedexpansion
set go=
for /f "delims=" %%A in ('findstr /n "^" "%~f0"') do (
    set "line=%%A" && set "line=!line:*:=!"
    if defined go (if #!line:~1!==#!go::=! (goto :EOF) else echo(!line!)
    if "!line:~0,13!"=="call :heredoc" (
        for /f "tokens=3 delims=>^ " %%i in ("!line!") do (
            if #%%i==#%1 (
                for /f "tokens=2 delims=&" %%I in ("!line!") do (
                    for /f "tokens=2" %%x in ("%%I") do set "go=%%x"
                )
            )
        )
    )
)
goto :EOF

顺便说一下,您应该记住命令提示符 windows 默认情况下是 80 列。您的屏幕截图看起来对于典型的控制台来说太宽了 window。