windows的set命令使用简介
本博客(http://blog.csdn.net/livelylittlefish)贴出作 者(三二一@小鱼)相关研究、学习内容所做的笔记,欢迎广大朋友指正!
windows的set命令使用简介
作用:显示、设置或删除 cmd.exe 环境变量。
格式:
SET [variable=[string]]
variable 指定环境变量名。
string 指定要指派给变量的一系列字符串。
要求:SET命令不允许变量名含有等号。
1. 显示当前环境变量及其值
格式:set (不带参数)
如:
C:/Users/yuzubo>set
ACE_ROOT=F:/opensource/ACE-5.6.4/ACE_wrappers
...
OS=Windows_NT
Path=C:/Windows/system32;C:/Windows;C:/Windows/System32/Wbem;C:/Windows/System32/WindowsPowerShell/v1.0/;C:/Program File
s/Common Files/Thunder Network/KanKan/Codecs;C:/Program Files/Microsoft SQL Server/90/Tools/binn/;D:/Program Files/Micro
soft Visual Studio/Common/Tools/WinNT;D:/Program Files/Microsoft Visual Studio/Common/MSDev98/Bin;D:/Program Files/Micro
soft Visual Studio/Common/Tools;D:/Program Files/Microsoft Visual Studio/VC98/bin;D:/Program Files/UltraEdit/;D:/Program
Files/UltraCompare;F:/opensource/ACE-5.6.4/ACE_wrappers/lib;D:/Program Files/UltraCompare/
...
VBOX_INSTALL_PATH=D:/Program Files/VirtualBox/
VS100COMNTOOLS=D:/Program Files/Microsoft Visual Studio 10.0/Common7/Tools/
VS80COMNTOOLS=D:/Program Files/Microsoft Visual Studio 8/Common7/Tools/
VS90COMNTOOLS=D:/Program Files/Microsoft Visual Studio 9/Common7/Tools/
windir=C:/Windows
2. 显示以str打头的环境变量及其值
格式:set str
如:
C:/Users/yuzubo>set ACE ACE_ROOT=F:/opensource/ACE-5.6.4/ACE_wrappers
C:/Users/yuzubo>set boost BOOST_1_43_ROOT=F:/opensource/boost_1_43_0 |
如果在当前环境中找不到该变量名称,SET命令将把ERRORLEVEL设置成1。如:
C:/Users/yuzubo>echo %ERRORLEVEL%
0
C:/Users/yuzubo>set abcd
环境变量 abcd 没有定义
C:/Users/yuzubo>echo %errorlevel%
1
如果只是现实其值,使用echo命令即可。例如:
C:/Users/yuzubo>echo %ACE_ROOT%
F:/opensource/ACE-5.6.4/ACE_wrappers
3. 设置/修改环境变量
格式:set variable=string
如:
//设置
C:/Users/yuzubo>set abcd=aaaaaaaa
C:/Users/yuzubo>echo %abcd%
aaaaaaaa
C:/Users/yuzubo>set abcd
abcd=aaaaaaaa
//修改
C:/Users/yuzubo>set abcd=bbbbbbbb
C:/Users/yuzubo>echo %abcd%
Bbbbbbbb
C:/Users/yuzubo>set abcd
abcd=bbbbbbbb
4. 清空环境变量
格式:set variable=
如:
//假设环境变量abcd的初始值为bbbbbbbb
C:/Users/yuzubo>echo %abcd%
bbbbbbbb
//清空
C:/Users/yuzubo>set abcd=
C:/Users/yuzubo>echo %abcd%
%abcd%
C:/Users/yuzubo>set abcd
环境变量 abcd 没有定义
5. 命令行开关/a
格式:SET /A expression
/A 命令行开关指定等号右边的字符串为被评估的数字表达式。该表达式评估器很简单并以递减的优先权顺序支持下列操作:
() - 分组(grouping)
! ~ - - 一元运算符(unary operators)
* / % - 算术运算符(arithmetic operators)
+ - - 算术运算符(arithmetic operators)
<< >> - 逻辑移位(logical shift)
& - 按位“与”(bitwise and)
^ - 按位“异或”(bitwise exclusive or)
| - 按位“或”(bitwise or)
= *= /= %= += -= - 赋值(assignment)
&= ^= |= <<= >>=
, - 表达式分隔符(expression separator)
如:
C:/Users/yuzubo>set /a abcd=4+6
10
C:/Users/yuzubo>set /a var=12&9
12'9' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
C:/Users/yuzubo>set /a var="12&9"
8
C:/Users/yuzubo>echo %var%
8
C:/Users/yuzubo>set /a var=18%5
3
C:/Users/yuzubo>set /a var="18%5"
3
貌似逻辑操作符需要用双引号(不能使用单引号)。
6. 命令行开关/p
格式:SET /P variable=[promptString]
/P 命令行开关允许将变量数值设成用户输入的一行输入。读取输入行之前,显示指定的 promptString。promptString 可以是空的。
如:
//promptString为空
C:/Users/yuzubo>set /p var=
ssssss
C:/Users/yuzubo>set var
var=ssssss
C:/Users/yuzubo>echo %var%
ssssss
//promptString不为空
C:/Users/yuzubo>set /p var=please input the value:
please input the value:cccccccccc //在此提示输入
C:/Users/yuzubo>set var
var=cccccccccc
C:/Users/yuzubo>echo %var%
cccccccccc
7. 环境变量扩展
(1) 替换
格式:%PATH:str1=str2%
会扩展PATH环境变量,用"str2"代替扩展结果中的每个"str1"。要有效地从扩展结果中删除所有的"str1","str2"可以是空的。"str1" 可以以星号打头;在这种情况下,"str1"会从扩展结果的开始到str1剩余部分第一次出现的地方,都一直保持相配。
(2) 提取子字符串1
格式:%PATH:~10,5%
会扩展PATH环境变量,然后只使用在扩展结果中从第11个(偏移量10)字符开始的五个字符。如果没有指定长度,则采用默认值,即变量数值的余数。如果两个数字(偏移量和长度)都是负数,使用的数字则是环境变量数值长度加上指定的偏移量或长度。
(3) 提取子字符串2
格式:%PATH:~-10%
会提取PATH变量的最后十个字符。
(4) 提取子字符串3
格式:%PATH:~0,-2%
会提取PATH变量的所有字符,除了最后两个。
如:
//设置
C:/Users/yuzubo>set mystring=abcdefgabcdefg
C:/Users/yuzubo>echo %mystring%
abcdefgabcdefg
//替换cde为hhh
C:/Users/yuzubo>echo %mystring:cde=hhh%
abhhhfgabhhhfg
C:/Users/yuzubo>echo %mystring%
abcdefgabcdefg
//取从第6个字符开始的3个字符
C:/Users/yuzubo>echo %mystring:~5,3%
fga
//取最后4个字符
C:/Users/yuzubo>echo %mystring:~-4%
defg
//取所以字符,除了最后4个(与上一个命令恰好相反)
C:/Users/yuzubo>echo %mystring:~0,-4%
abcdefgabc
8. 动态环境变量
如果命令扩展被启用,有几个动态环境变量可以被扩展,但不会出现在SET显示的变量列表中。每次变量数值被扩展时,这些变量数值都会被动态计算。如果用户用这些名称中任何一个定义变量,那个定义会替代下面描述的动态定义。
%CD% - 扩展到当前目录字符串。
%DATE% - 用跟 DATE 命令同样的格式扩展到当前日期。
%TIME% - 用跟 TIME 命令同样的格式扩展到当前时间。
%RANDOM% - 扩展到 0 和 32767 之间的任意十进制数字。
%ERRORLEVEL% - 扩展到当前 ERRORLEVEL 数值。
%CMDEXTVERSION% - 扩展到当前命令处理器扩展版本号。
%CMDCMDLINE% - 扩展到调用命令处理器的原始命令行。
如:
C:/Users/yuzubo>echo %cd%
C:/Users/yuzubo
C:/Users/yuzubo>echo %date%
2010/11/26 周五
C:/Users/yuzubo>echo %time%
23:40:35.62
C:/Users/yuzubo>echo %time%
23:40:41.71
C:/Users/yuzubo>echo %random%
18528
C:/Users/yuzubo>echo %random%
2589
C:/Users/yuzubo>echo %cmdcmdline%
"C:/Windows/system32/cmd.exe"
9. 再深入一点
(1) 这些环境变量在哪里?
windows系统最大的特点就是将绝大多数系统配置信息保存在自己的数据库中,这个数据库就是注册表。
整个系统都有效的环境变量在注册表中的位置:
HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001/Control/Session Manager/Environment
对当前用户有效的环境变量在注册表中的位置:
HKEY_CURRENT_USER/Environment
(2) 值得注意的事:环境变量的生效
修改环境变量的方法:
方法 | 步骤 | 是否立即生效 |
|
|
|
脚本 |
| 否 |
修改注册表 | 如(1) | 否 |
设置系统属性 | 系统->属性->高级->环境变量 | 是 |
当然,如果写程序,先修改注册表,在调用win32 API,发送一个消息来更新系统的变量,也可以使之生效,在此不多叙述,只列出调用API的方法:
//发送一个广播消息,等待各自回应后,立即生效。
SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0,LPARAM("Environment"), SMTO_ABORTIFHUNG, 5000, &MsgResult);
Reference
set/?
注释:
在设计一个软件时,若我们把该软件(源码)上的一些变量的取值放在注册表(windows操作系统)上设置【即在注册表上有一个与该变量相同名字的变量】的话,则称该形式取值的变量为环境变量。
环境变量读取其值的过程如下:
操作系统在内存有一块内存区域是存放这些环境变量的值,环境变量只要在该内存区域上找到同名的变量读取其值即可给自己赋值了。set命令所作用的范围就是这块内存区域。不带参数的set是显示在该内存区域上所有与环境变量同名的变量的值。而通过set设置的值,如set ad=tt形式,其有效期只是在执行该set命令的进程对应的会话期间,即临时性的,还有ad这个变量名是你可以随意设置的,无论在操作系统内有否哪个环境变量与之同名。 如果在该内存区域上找不到同名的变量, 才会去磁盘上的注册表文件上查找与该环境变量相同名字的变量并读取其值到这块内存区域上。当然,在注册表上,假如在本文下一节所说的两个位置里都有同名的变量,则会优先读取第一个位置里变量的值,即在应用程序安装时本软件写入在注册表里的位置那个变量。这个位置没有存在该同名变量,才会读取第二个位置里变量的值,即在“系统属性”-》“高级”-》“环境变量”这个界面对应在注册表里的位置内的那个变量。
注释:
在注册表上,对一个变量的描述分三个部分:变量名,变量类型,变量值。其实,无论变量是那种类型,记录在在注册表上都是以字符串类型来分别记录一个变量的三个信息:变量名,变量类型,变量值。
格式:
SET [variable=[string]]
variable 指定环境变量名。
string 指定要指派给变量的一系列字符串。
从set的语法里的string也可看出 记录在在注册表上都是以字符串类型来分别记录一个变量的三个信息:变量名,变量类型,变量值。
参考:windows set命令 百度
