文章目录
- 1. 默认值(控制台窗口)属性
- 2. "C:\Windows\System32\cmd.exe" 属性
- 3. "命令提示符"属性
- 4. 自定义某标题cmd窗口属性
- 5. cmd快捷方式的属性
- 总结
最近在写某个批处理脚本时,意外发现 Windows系统中,在不同路径打开的cmd/dos窗口,属性配置竟然不同。
接下来探究下不同路径下打开的dos窗口,属性配置是否相同。
阅读本文之前,建议先看下:Windows 打开cmd/dos窗口的12种方式(全网最全)
以下演示在Win10系统,其他版本系统可能会有不同
为了简便起见,如无特殊说明,就以窗口背景不同作为配置的区别
1. 默认值(控制台窗口)属性
右键开始
>命令提示符
,打开cmd窗口(其他方式打开也行),在顶部标题栏中右键 > 默认值
,打开控制台窗口
属性窗口界面,在颜色
选项卡下,设置屏幕背景
为灰色ColorTable08
,确认保存
属性
-颜色
里提供了16个ColorTable
,数量上不能新增或删除,但是可以修改颜色值。
修改方法:
方法1:在这个窗口选定某个ColorTable
,在选定的颜色值
区域,修改R G L
值,确认即可保存;
方法2:修改注册表:HKEY_CURRENT_USER\Console
,找到名称为ColorTable00
~ColorTable15
共16个,修改对应的值即可,其中值十六进制表示法,例如:dd963a
,3a
代表R
的值十进制58
,96
代表G
的值十进制150
,dd
代表L
的值十进制221
然后开始做验证。
1)从开始菜单
>Windows系统
>命令提示符
打开;
2)从Win+R
运行>输入cmd
回车,打开;
3)从.bat
批处理,双击打开(举例:test.bat
内容 @echo off & pause
)
从下边测试效果,可以看出,默认值对这三种方式打开的窗口属性都生效了。
查看注册表HKEY_CURRENT_USER\Console
,其中ScreenColors
值用来控制窗口前景色及背景色,其值由两个16进制数字组成,这两个数字代表注册表中ColorTable
编号。举例:ScreenColors
值为87
,则表示使用ColorTable08
指定的值作为背景色,使用ColorTable07
指定的值作为前景色。该解释参考自color /?
2. “C:\Windows\System32\cmd.exe” 属性
Win+R
运行>输入cmd
回车,打开cmd窗口,在顶部标题栏中右键 > 属性
,打开C:\Windows\System32\cmd.exe
属性窗口界面,在颜色
选项卡下,设置屏幕背景
为第4个ColorTable03
,蓝色,确认保存。
然后开始做验证。
1)从开始菜单
>Windows系统
>命令提示符
打开;
2)从Win+R
运行>输入cmd
回车,打开;
3)从.bat
批处理,双击打开(举例:test.bat
内容 @echo off & pause
)
从下边测试效果,可以看出,修改cmd.exe
属性,仅对通过C:\Windows\System32\cmd.exe
打开的窗口有效,对从开始菜单打开的命令提示符窗口无效(双击.bat
批处理,实际上也是调用的C:\Windows\System32\cmd.exe
程序来执行的)
此时你如果打开注册表HKEY_CURRENT_USER\Console
,你会发现在它下边多了个子项%SystemRoot%_System32_cmd.exe
(如果你从没有修改过C:\Windows\System32\cmd.exe
属性,是没有这个子项的)。
在这个子项下,ScreenColors
的值 就是新修改的cmd窗口的背景色值&前景色配置37
,即 背景色为ColorTable03
的指定的颜色值,前景色为ColorTable07
的指定的颜色值。
3. "命令提示符"属性
从开始菜单
>Windows系统
>命令提示符
打开。在顶部标题栏中右键 > 属性
,打开命令提示符
属性窗口界面,在颜色
选项卡下,设置屏幕背景
为淡绿色ColorTable10
,蓝色,确认保存。
然后开始做验证。
1)从开始菜单
>Windows系统
>命令提示符
打开;
2)从Win+R
运行>输入cmd
回车,打开;
3)从.bat
批处理,双击打开(举例:test.bat
内容 @echo off & pause
)
从下边测试效果,可以看出,修改命令提示符
属性,仅对命令提示符
窗口有效。
此时你如果打开注册表HKEY_CURRENT_USER\Console
,在其下,是没有任何关于命令提示符
相关的项。
你可以将注册表导出,然后重新修改命令提示符的属性,然后再导出注册表,将两个导出的注册表进行比对,来验证这一点
4. 自定义某标题cmd窗口属性
在注册表HKEY_CURRENT_USER\Console
下,新增一个子项,这里假如名为 Chen
,然后再在这个子项下添加一个DWORD
类型的值,名称为ScreenColors
,值为十六进制的c7
,表示背景色为淡红色,前景色白色。
然后开始做验证。
1)随便一种方式,打开一个cmd命令行窗口,输入start "Chen"
,Chen
替换为你自定义的命令行窗口标题
2)然后用Start
命令再启动一个"Test"标题的命令行窗口(确认你未在注册表未使用过"Test"作为子项名)
验证效果如下↓ ,从测试结果看,标题为Chen
的命令行窗口,使用了注册表HKEY_CURRENT_USER\Console
下的子项Chen
里配置的ScreenColors
值,而Test
标题的命令行窗口,使用了注册表HKEY_CURRENT_USER\Console
里的ScreenColors
值(即默认属性值)
5. cmd快捷方式的属性
1)进入到C:\Windows\system32
目录,右键菜单创建快捷方式
,将快捷方式放到桌面,然后给快捷方式建一个名字,比如我这里命名为lnkcmd1.lnk
,然后再从lnkcmd1.lnk
复制出来一个lnkcmd2.lnk
;
2)双击lnkcmd2.lnk
打开命令行窗口,在标题栏右键>属性
,切换到颜色
选项卡,然后在这个快捷方式文件上,右键>属性,在颜色选项卡下,设置屏幕背景为淡绿色ColorTable13,淡紫色,应用保存;
(lnkcmd1.lnk
不要改,保持原样)
然后开始做验证。
1)分别双击两个lnk快捷方式
从测试结果看,lnkcmd1.lnk
使用了默认属性值,而lnkcmd2.lnk
使用了自定义的属性值。
此时你如果打开注册表HKEY_CURRENT_USER\Console
,在其下,是没有任何关于lnkcmd2.lnk
相关的项的。
其实lnkcmd2.lnk
的属性是保存到了这个快捷方式文件内的。下边来验证下这点。
将下面的python
代码,保存到getLnkInfo.py
文件,然后也放到桌面。
# -*- coding:utf-8 -*-
import sys
import LnkParse3
f_path = sys.argv[1]
with open(""+f_path,"rb") as lf:
ldata = LnkParse3.lnk_file(lf)
ldata.print_json() # 打印输出格式化后的json数据
在命令行分别执行如下命令:
注意:
1)你需要安装python3
环境,并安装LnkParse3
库,命令pip install LnkParse3
;
2)桌面路径需改为你自己的;
3).lnk
、.py
文件放在同一目录,否则你需要使用绝对路径;
cd C:\Users\cyinl\Desktop
python getLnkInfo.py lnkcmd1.lnk > lnkinfo1.txt
python getLnkInfo.py lnkcmd2.lnk > lnkinfo2.txt
然后用文本对比工具 对比 lnkinfo1.txt
、lnkinfo2.txt
,可以看出
1)lnkcmd2.lnk
的命令行窗口属性是保存到该快捷方式文件本身的,在lnkinfo2.txt
体现在extra.CONSOLE_PROPERTIES_BLOCK
对象各属性值,其中这里的fill_attributes
就是前景色、背景色属性信息,215
是十进制,转换为十六进制为d7
,d
表示背景色对应ColorTable13
对应的颜色值(淡紫色),7
表示前景色对应ColorTable07
对应的颜色值(白色)
2)lnkcmd1.lnk
的命令行窗口属性,从lnkinfo1.txt
信息看,没有找到extra.CONSOLE_PROPERTIES_BLOCK
对象,因此推测它应该是沿用了HKEY_CURRENT_USER\Console
注册表中相关的属性配置。
为了验证【lnkcmd1.lnk
的命令行窗口属性,是使用HKEY_CURRENT_USER\Console
注册表中相关的属性配置】这个推出,再做个测试。
将lnkcmd1.lnk
重命名为Chen.lnk
,然后双击打开这个快捷方式。
细心的你应该能发现,这个颜色值,就是 【4. 自定义某标题cmd窗口属性】中,在注册表HKEY_CURRENT_USER\Console\Chen
下配置的ScreenColors
的值c7
(背景色为淡红色,前景色白色)。
也就是说Chen.lnk
快捷方式文件里没有命令行窗口属性信息,于是它从注册表HKEY_CURRENT_USER\Console\Chen
去找,如果找到就加载配置,如果没有同标题名的Chen
子项,就是用HKEY_CURRENT_USER\Console
里默认的配置信息。
总结
- 通过
cmd.exe
应用程序直接打开的命令行窗口,会在注册表HKEY_CURRENT_USER\Console
,找与窗口标题同名的子项的配置,如果未找到子项或子项下没有某个配置,则使用HKEY_CURRENT_USER\Console
下的默认配置; - (从cmd.exe创建的)
.lnk
快捷方式打开的命令行窗口,如果从未修改过该快捷方式对应的属性,那么它打开的窗口属性,是从注册表HKEY_CURRENT_USER\Console
下同名的子项中加载,如果没找到子项或子项下没有某个配置,则加载HKEY_CURRENT_USER\Console
下的默认配置; - 如果修改过
.lnk
快捷方式对应的属性,那么它的命令行窗口属性信息,将保存到快捷方式文件本身,而不再从注册表加载配置; - 开始菜单的
命令提示符
,实际上就是一个lnk
快捷方式,因此它遵循总结2、3的规则
相关文章:
Windows 打开cmd/dos窗口的12种方式(全网最全)
Windows 如何打开和编辑.lnk文件
参考资料:
what’s the difference between command prompt and cmd?
Where do my Windows Command Prompt properties get saved