如何使批处理文件的某一特定行与其他行不同?

Sea*_*ain 8 batch-file

我正在制作一个节目,为D&D游戏创造一天的天气.我希望程序在生成风暴时以红色文本显示警告,以便DM知道这种天气不典型.要减少击键次数,必须在与详细说明天气本身的文本相同的屏幕上执行此操作.

目前,对于暴风雨的进入,我有这样的:

:des4a
cls
type c:\AutoDM\WeatherGen\data\forcast1.txt
color 0c
echo     There is an Ashstorm!
color 0a
echo.
echo     It is %temp% degrees and the sky is invisible threw the thick 
echo     billowing clouds of ash.
echo.
echo         # Survival checks to light a fire are at +15. 
echo         # Small unprotected flames will be snuffed out.
echo         # Non-firearm ranged attacks are at a -8 to hit.
echo         # Preception checks take a -10 for every 10 feet of distance.
echo         # Survival checks to get along in the wild are at +15.
echo         # Stealth checks are at a +5.
echo.
echo     SPECIAL!
echo.
set /a die=6
set /a inches=%random%%%die+1
echo         # The ashstorm will deposit %inches% inches of ash durring its
echo           durration.
echo         # Tracking a target after an ashstorm is at a +15.
type c:\AutoDM\WeatherGen\data\forcast2.txt
echo.
echo.
pause
goto menu
Run Code Online (Sandbox Code Playgroud)

类型命令调用文本文档,其中包含每个条目的页眉和页脚,以帮助程序看起来很专业,并提供边框以协助自动换行.你不能被删除.请不要提出一些让我无法使用当前存在的类型命令的内容.请理解,每当发生器中的每个生物群系都出现风暴时,此红色文本行将添加到程序的许多不同部分.我希望它不仅仅是2或3行代码(但如果只有一种方法可以做得好......)

我可以让一行为红色,其余为绿色吗?或者我应该让程序发出嘟嘟声以引起注意这一事实?你有更好更简单的想法吗?我该怎么做呢?

Vis*_*gic 27

昨天我遇到了同样的问题,我做了一些研究,对我有用.编辑:这是相同的代码为另一种.

@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"
)
call :colorEcho 0a "This is colored green with a black background!"
echo.
call :colorEcho a0 "This is colored black with a green background!"
echo.
pause
exit
:colorEcho
echo off
<nul set /p ".=%DEL%" > "%~2"
findstr /v /a:%1 /R "^$" "%~2" nul
del "%~2" > nul 2>&1i
Run Code Online (Sandbox Code Playgroud)

它这样做: 产量

所有你需要做的,以适应这把部分从SETLOCAL EnableDel...到)你的代码的开头(如果你的代码@echo开始了,然后把它放在那),并也把部分:colorEchodel %~2在确切的底部你的剧本(没有发现!)

现在你们之间注意到了

call :colorEcho 0a "This is colored green with a black background!"
echo.
call :colorEcho a0 "This is colored black with a green background!"
echo.
pause
exit
Run Code Online (Sandbox Code Playgroud)

解释一行行:第一行(call :colorEcho 0a "This is colored green with a black background!"):这是一个colored回声,它令人惊讶说,This is colored green with a black background!0a(黑色BG,绿色文本),第二行(echo.)打印一个换行符,因为我们的彩色回声不打印之一.

所以

假设你想说"Hello World" Hello是黄色和World绿色.例!

@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"
)
call :colorEcho 0e "Hello "
call :colorEcho 0a " World"
pause
exit
:colorEcho
echo off
<nul set /p ".=%DEL%" > "%~2"
findstr /v /a:%1 /R "^$" "%~2" nul
del "%~2" > nul 2>&1i
Run Code Online (Sandbox Code Playgroud)

这就是它的作用: 产量 我希望这是可以理解的!

编辑:确保程序exit可以达到之前:colorEcho

  • 整洁,但这可以删除磁盘上的文件。假设您想显示一个文件名并突出显示它(即“ c:\ output \ reports \ test.txt”),代码将是...调用:colorEcho 0a“ c:\ output \ reports \ test.txt”如果文件确实存在,:colorEcho ... del“%〜2” ....的最后一行将删除该文件。 (2认同)
  • 是否可以在突出显示的行中包含特殊字符?例如,这有效:`call:colorEcho 0e"anthing我可以帮助"`但这不是:`call:colorEcho 0e"anthing else我可以帮忙吗?" (2认同)
  • 对于每个想用这个画一些奇特东西的人来说。您需要避免使用像“:”、“/”、“\”这样的字符,这些字符会让您的字符串看起来像路径(这也指“.”和“..”),并且还要避免像“*”这样的通配符。请注意,您不能使用尾随空格。快乐的绘画;) (2认同)