几周前我开始使用Batch编码,每天工作几个小时。
我正在编写一个脚本来自动启动和自动创建过时的文件。我觉得尝试“有趣”的事情会很好。
我要做的是让我的主脚本保存一个配置文件,其中包含批处理颜色代码,以便稍后/首次启动时调用,并将自身更改为先前保存的颜色代码。最好带有文本文件。
我尝试过使用全局变量的东西。我认为我的IT已禁用,因为我无法在脚本之间共享变量状态。我没有试过启用它。我还应该提到我们在Windows 7上。
我已经开始使用下面的示例代码创建colors.bat
。在向用户询问应用于变量的颜色代码之后,我已将重定向应用于我的主脚本以保存文件。现在,在主脚本的第一次启动时调用此批处理文件,稍后我将添加一个语句来检查文件是否存在。
color 5e
相反,我更喜欢可以调用的文本文件,或者甚至是没有容器的文件来阻止后端编辑。
但是我似乎无法让我的脚本正确地在文本文件中应用代码。以下是未能应用颜色更改的示例。在“colors.txt”文件中,只是批量兼容的颜色代码“5e”,没有别的。
type colors.txt | color
echo Test
color <colors.txt
echo Test
上面的代码我也尝试过不同的空格位置。
我已经在这里看了几个小时,现在阅读批量和重定向以及其他任何有趣的事情。我试着将颜色代码作为文件名,然后尝试像“%~n1”这样的参数。我根本想不通。
我希望这一切都不会令人困惑。但我要重申一下,现在的脚本正常运行。我想使用.txt
容器而不是.bat
或更好,但根本没有容器。甚至可以启用全局变量,以最佳路线为准。我想在脚本开始时调用此文件以应用颜色代码。
如果您有任何其他问题,请与我们联系。 感谢。
答案 0 :(得分:0)
这是相当直接的
@echo off
setlocal enabledelayedexpansion
if exist colors.txt (
goto setcolor
) else (
set /p color="Choose color: "
echo !color! > colors.txt
attrib colors.txt +r
endlocal
goto setcolor
)
:setcolor
for /F %%i in (colors.txt) do color %%i
echo Test
pause
上面的代码检查colors.txt
是否存在,如果不存在,它会提示您选择首选颜色和背景颜色。将代码保存到文件然后进行设置,下次找到文件时,它只会设置颜色而不重新提示。我们还设置attrib +r
以使文件为只读,如果您想阻止人们编辑它,可以采取一些方法。
编辑:
enabledelayedexpansion
执行cmd /?
,您会看到
/ V:ON
使用!启用延迟环境变量扩展!作为 分隔符。例如,/ V:ON将允许!var!扩大 执行时变量var。 var语法扩展了变量 在输入时,这在FOR内部时是完全不同的 循环。