运行 时出现批处理错误
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。
当我 运行 在它关闭之前我只能看到几行,例如 _ 和一个黑色的批处理文件屏幕关闭。
|
字符称为管道。它分离命令,将一个命令的输出推入另一个命令的输入。因为它们在批处理脚本中具有特殊含义,所以您不能只回显它们而不用插入符号转义它们,或者将它们设置为变量并通过延迟扩展进行检索。
下面是一个简单的转义示例:
@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。