为什么我的特殊字符在引用批处理中不被忽略?

时间:2014-12-05 15:11:07

标签: batch-file colors output echo

我试图在我的批处理文件中使用/ | \ characters创建一些多行,多色ascii艺术。

但是,我认为我的批处理脚本将它们作为命令读取而不是仅输出文本。

*这是基于我在此处找到的一些着色代码:Batch Color per line

@echo off
SETLOCAL EnableDelayedExpansion
for /F "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do (
  set "DEL=%%a"
)
echo TEST

call :ColorText 0a "################################################################################################################################################################"
call :ColorText 1b "^/^|^\" 
call :ColorText 0a "################################################################################################################################################################"

goto :eof

:ColorText
echo off
<nul set /p ".=%DEL%" > "%~2"
findstr /v /a:%1 /R "^$" "%~2" nul
del "%~2" > nul 2>&1
goto :eof

特殊字符在它们前面有^,它们在引号中。

我怎样才能打印这些特殊字符用于我的Ascii Art?

以下是我得到的输出:

F:\>test
TEST
################################################################################
################################################################################
The system cannot find the path specified.
FINDSTR: Cannot open ^^/^^|^^" nul
################################################################################
################################################################################
F:\>

1 个答案:

答案 0 :(得分:0)

您正在使用过时的代码。 jeb updated his code,然后是dbenham updated jeb's update。试试这个:

@echo off
setlocal

call :initColorPrint

call :ColorPrint 0a "################################################################################################################################################################"
call :ColorPrint 1b "/|\" 
call :ColorPrint 0a "################################################################################################################################################################"


call :cleanupColorPrint

exit /b

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

:colorPrint Color  Str  [/n]
setlocal
set "str=%~2"
call :colorPrintVar %1 str %3
exit /b

:colorPrintVar  Color  StrVar  [/n]
if not defined %~2 exit /b
setlocal enableDelayedExpansion
set "str=a%DEL%!%~2:\=a%DEL%\..\%DEL%%DEL%%DEL%!"
set "str=!str:/=a%DEL%/..\%DEL%%DEL%%DEL%!"
set "str=!str:"=\"!"
pushd "%temp%"
findstr /p /A:%1 "." "!str!\..\x" nul
if /i "%~3"=="/n" echo(
exit /b

:initColorPrint
for /F "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do set "DEL=%%a"
<nul >"%temp%\x" set /p "=%DEL%%DEL%%DEL%%DEL%%DEL%%DEL%.%DEL%"
exit /b

:cleanupColorPrint
del "%temp%\x"
exit /b