本博客(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 的初始值为 b bbbbbbb
C :/Users/yuzubo>echo %abcd%
b bbbbbbb
// 清空
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%
c ccccccccc
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%
a bcdefgabcdefg
// 替换 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) 值得注意的事:环境变量的生效
修改环境变量的方法:
方法 |
步骤 |
是否立即生效 |
命令行 |
set 命令 |
否 |
脚本 |
|
否 |
修改注册表 |
如 (1) |
否 |
设置系统属性 |
系统 -> 属性 -> 高级 -> 环境变量 |
是 |
当然,如果写程序,先修改注册表,在调用 win32 API ,发送一个消息来更新系统的变量,也可以使之生效,在此不多叙述,只列出调用 API 的方法:
// 发送一个广播消息,等待各自回应后,立即生效。
SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0,LPARAM("Environment"), SMTO_ABORTIFHUNG, 5000, &MsgResult);
Reference
set/?