2010-04-06 73 views
1

我有一個批處理文件,如下所示:如何更改註釋行的文本顏色在批處理文件

myfile.bat 
:: This is a sample batch file 

@echo off 
echo change directory to d: <---How to change color of only this line (comments lines) 
CD d:\ 
... 
+0

您使用的是Windows或DOS(ansi.sys允許更改提示顏色個別行)?考慮一個不同的shell(cygwin)或腳本語言(可能是vbscript/jscript?) – davidosomething 2010-04-06 15:34:12

+0

是的,我正在使用DOS。由於批處理文件以不同的步驟進行,因此我在開始時給出了註釋行,並且我希望這些註釋行在區分方面有所不同。請幫助我解釋如何使用ansi.sys) – flopdix 2010-04-06 15:37:37

+0

'ansi.sys'只能用於'command.com'。 – Joey 2010-04-18 09:08:21

回答

0

有這樣做的沒有內置的方式。我建議你自己編寫一個小幫手程序,它可以改變文本的顏色屬性或者寫入一些帶有特定顏色屬性的文本。

在C#中,這可能如下所示:

using System; 

class SetConsoleColor { 
    static void Main(string[] args) { 
     if (args.Length < 3) { 
      Console.Error.WriteLine("Usage: SetConsoleColor [foreground] [background] [message]"); 
      return; 
     } 

     Console.ForegroundColor = (ConsoleColor)Enum.Parse(typeof(ConsoleColor), args[0], true); 
     Console.BackgroundColor = (ConsoleColor)Enum.Parse(typeof(ConsoleColor), args[1], true); 

     Console.WriteLine(args[2]); 

     Console.ResetColor(); 
    } 
} 

隨意地移植到C或你喜歡的另一種語言;這對我來說是在與一個仍然沒有工作的50線C怪物掙扎之後最快的方式;-)。

1

一個幾乎相同的問題,有人問這一個6個月後,和傑布之後提供一個很好的答案3:how to have multiple colors in a batch file?

他的回答讓在一行上打印多種顏色!

這是他的解決方案作爲獨立批處理文件的改編版,可以用作實用程序以批量打印顏色。要在白色背景上以紅色文本打印Hello world!,您可以使用call colorText f4 "Hello world!"。有關完整的文檔和限制,請參閱代碼中的註釋。

@echo off 
:ColorText Color String 
:: 
:: Prints String in color specified by Color. 
:: 
:: Color should be 2 hex digits 
::  The 1st digit specifies the background 
::  The 2nd digit specifies the foreground 
::  See COLOR /? for more help 
:: 
:: String is the text to print. All quotes will be stripped. 
::  The string cannot contain any of the following: * ? < > | : \/
::  Also, any trailing . or <space> will be stripped. 
:: 
:: The string is printed to the screen without issuing a <newline>, 
:: so multiple colors can appear on one line. To terminate the line 
:: without printing anything, use the ECHO(command. 
:: 
setlocal 
pushd %temp% 
for /F "tokens=1 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do (
    <nul set/p"=%%a" >"%~2" 
) 
findstr /v /a:%1 /R "^$" "%~2" nul 
del "%~2" > nul 2>&1 
popd 
exit /b