2015-10-22 73 views
0

我只是上網查找批量的函數,它使文本着色。這是代碼:這個批處理代碼到底做了什麼?

:Color 
:: v20 deprecated. 
:: Arguments: hexColor text [\n] 
:: Supported in windows XP, 7, 8. 
:: In XP extended ascii characters are printed as dots. 
:: For print quotes, use empty text. 
SetLocal enableExtensions EnableDelayedExpansion 
Set "Text=%~2" 
If Not Defined Text (Set Text=^") 
Subst `: "!Temp!" >Nul &`: &Cd \ 
If Not Exist `.7 (
Echo(|(Pause >Nul &Findstr "^" >`) 
Set /P "=." >>` <Nul 
For /F "delims=;" %%# In (
'"Prompt $H;&For %%_ In (_) Do Rem"') Do (
Set /P "=%%#%%#%%#" <Nul >`.3 
Set /P "=%%#%%#%%#%%#%%#" <Nul >`.5 
Set /P "=%%#%%#%%#%%#%%#%%#%%#" <Nul >`.7)) 
Set /P "LF=" <` &Set "LF=!LF:~0,1!" 
For %%# in ("!LF!") Do For %%_ In (
\/:) Do Set "Text=!Text:%%_=%%~#%%_%%~#!" 
For /F delims^=^ eol^= %%# in ("!Text!") Do (
If #==#! SetLocal DisableDelayedExpansion 
If \==%%# (Findstr /A:%~1 . \` Nul 
Type `.3) Else If /==%%# (Findstr /A:%~1 . /.\` Nul 
Type `.5) Else (Echo %%#\..\`>`.dat 
Findstr /F:`.dat /A:%~1 . 
Type `.7)) 
If "\n"=="%~3" (Echo() 
Goto :Eof 

任何人都可以請解釋這是如何工作的?我真的很想知道每個短語做了什麼以及它如何參與打印彩色文本。

P.S.我知道那裏發生的大部分事情,我只是不知道它是如何使控制檯以彩色打印文本以及爲什麼會在%Temp%目錄中創建文件。

我想說明一步一步,容易理解請。

謝謝!

+3

'findstr/a'是着色輸出的實際命令,其他所有內容都爲它準備一個文件。代碼是故意隱晦的,因爲很明顯,作者喜歡這種代碼「風格」,所以通過簡單地用適當的縮進以可讀的方式重新格式化它,然後閱讀'prompt'上的幫助,和'findstr'。順便說一句,在dostips上有一個[更新的版本23](http://www.dostips.com/forum/viewtopic.php?p=41155#p41155)。 – wOxxOm

+0

謝謝,如果您將它發佈爲答案,我會給你+1。附:我知道有一個新版本,但速度較慢,所以我不使用它。 – KKZiomek

+0

我以爲(還在想)別人可能會給你一個真正的擴展答案,你希望... – wOxxOm

回答

0

我不知道是怎麼回事,但對我來說,最簡單的方法是使用PowerShell:

@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" 
) 
rem Prepare a file "X" with only one dot 
<nul > X set /p ".=." 

頂部將這個(這將創建一個文件「X」將堅持圍繞。是煩人,但沒有什麼。

然後把這個在腳本的完整底部。

:colorEcho 
set "param=^%~2" ! 
set "param=!param:"=\"!" 
findstr /p /A:%1 "." "!param!\..\X" nul 
<nul set /p ".=%DEL%%DEL%%DEL%%DEL%%DEL%%DEL%%DEL%" 
exit /b 

然後用這個格式,使彩色文本:

call :ColorEcho 81 "text" &echo. 

81是CMD的顏色代碼。在命令提示符處運行color /?,您將在那裏找到顏色代碼。第一個是背景,第二個是文字。