set命令允许用户改变一个变量或串到另一个。
查看英文版
1 set 运行系统环境
2 set 语法
3 set 示例
4 隐藏命令
Windows 95
Windows 98
Windows xp
Windows 2000
Windows 7
Windows 8
Windows 10
Windows NT
Windows ME
All Versions of MS-DOS
Windows 2000,XP及更高版本的语法
显示,设置或删除cmd.exe 环境变量。
SET [variable=[string]]
variable | 指定环境变量名称。 |
string | 指定要分配给变量的一系列字符。 |
键入不带参数的SET以显示当前环境变量。
如果启用了命令扩展,则SET更改如下:
用变量名调用SET命令,没有等号或值显示其前缀与SET命令给定名称匹配的所有变量的值。例如:
SET P
将显示所有以字母“ P”开头的变量。
如果在当前环境中找不到变量名,则SET命令将ERRORLEVEL设置为1。
SET命令不允许等号成为变量名称的一部分。
SET命令中添加了两个新的开关:
SET /A expression
SET /P variable=[promptString]
/ A开关指定等号右边的字符串是要计算的数字表达式。表达式评估器非常简单,并且按优先级从高到低的顺序支持以下操作:
() | 分组 |
* / % | 算术运算符。 |
+ - | 算术运算符。 |
<< >> | 逻辑移位 |
& | 按位“与” |
^ | 按位“异” |
| | 按位“或” |
= *= /= %= += -= &= ^= |= <<= >>= |
赋值 |
, | 表达式分隔符 |
如果你使用任何逻辑或取余操作符, 你需要将表达式字符串用引号扩起来。在表达式中的任何非数字字符串键作为环境变量名称,这些环境变量名称的值已在使用前转换成数字。如果指定了一个环境变量名称,但未在当前环境中定义,那么值将被定为零。这使你可以使用环境变量值做计算而不用键入那些 % 符号来得到它们的值。如果 SET /A 在命令脚本外的命令行执行的,那么它显示该表达式的最后值。该分配的操作符在分配的操作符左边需要一个环境变量名称。除十六进制有 0x 前缀,八进制有 0 前缀的,数字值为十进位数字。因此,0x12 与 18 和 022相同。请注意八进制公式可能很容易搞混: 08 和 09 是无效的数字,因为 8 和 9 不是有效的八进制位数。
/ P命令允许您将变量的值设置为用户输入的输入行。在读取输入行之前显示指定的hintString。promptString可以为空。
环境变量替换已如下增强:
%PATH:str1=str2%
将扩展PATH环境变量,用str2替换扩展结果中str1的每次出现。str2可以是空字符串,以有效地从扩展输出中删除所有出现的str1。str1可以以星号开头,该星号与从扩展输出的开始到str1其余部分的第一次出现的所有内容匹配。
也可以为扩展指定子字符串。
%PATH:~10,5%
将扩展PATH环境变量,然后仅使用从扩展结果的第11个(偏移10)字符开始的5个字符。如果未指定长度,则默认为变量值的其余部分。如果数字(偏移量或长度)为负,则使用的数字是环境变量值的长度加上指定的偏移量或长度。
%PATH:~-10%
将提取PATH变量的最后10个字符。
%PATH:~0,-2%
会提取PATH变量的最后两个字符(最后两个字符除外)。
最后,添加了对延迟的环境变量扩展的支持。默认情况下,始终禁用此支持,但是可以通过/ V命令行开关CMD.EXE启用/禁用此支持。看到CMD /?
延迟的环境变量扩展有助于避免当前扩展的局限性,当前局限性是在读取一行文本时而不是在执行文本行时发生的。下面的示例演示了立即变量扩展的问题:
set VAR=before if "%VAR%" == "before" ( set VAR=after; if "%VAR%" == "after" @echo If you see this, it worked )
永远不会显示该消息,因为当将谎言读入内存时,%VAR%会展开。之后的变量所发生的变化(例如,复合if语句中的VAR = after)不会扩展。
同样,以下示例将无法正常工作:
set LIST= for %i in (*) do set LIST=%LIST% %i echo %LIST%
因为它不会在当前目录中建立文件列表,而是将LIST变量设置为找到的最后一个文件。同样,这是因为读取FOR语句后,%LIST%会扩展,此时LIST变量为空。因此,我们正在执行的实际FOR循环为:
for %i in (*) do set LIST= %i
将LIST设置为找到的最后一个文件。
延迟的环境变量扩展允许不同的字符(感叹号)在执行时扩展环境变量。如果启用了延迟变量扩展,则可以按如下所示编写以上示例以按预期方式工作:
set VAR=before if "%VAR%" == "before" ( set VAR=after if "!VAR!" == "after" @echo If you see this, it worked ) set LIST= for %i in (*) do set LIST=!LIST! %i echo %LIST%
如果启用了命令扩展,则可以扩展多个动态环境变量,这些变量不会显示。
SET显示的变量列表。每次扩展变量的值时,都会动态计算这些变量值。如果用户使用以下名称之一明确定义了变量,则该定义将覆盖下面描述的动态定义:
%CD% - 扩展到当前目录字符串。
%DATE% - 用跟 DATE 命令同样的格式扩展到当前日期。
%TIME% - 用跟 TIME 命令同样的格式扩展到当前时间。
%RANDOM% - 扩展到 0 和 32767 之间的任意十进制数字。
%ERRORLEVEL% - 扩展到当前 ERRORLEVEL 数值。
%CMDEXTVERSION% - 扩展到当前命令处理器扩展版本号。
%CMDCMDLINE% - 扩展到调用命令处理器的原始命令行。
Windows 2000和Windows XP故障恢复控制台语法
set [enviroment_variable]=[True/False]
[enviroment_variable] |
allowwildcards allowallpaths allowremovablemedia nocopyprompt |
[True/False] | 将enviroment_variable设置为true可启用enviroment_variable。默认情况下,这些设置为False。 |
MS-DOS,Windows 95,Windows 98,Windows ME语法
显示,设置或删除Windows环境变量。
SET [variable=[string]]
variable | 指定环境变量名称。 |
string | 指定要分配给变量的一系列字符。 |
键入不带参数的SET以显示当前环境变量。
查看英文版
set path=c:\windows\command
将路径设置为c:\ windows \ command。
set
显示当前定义的所有设置的环境变量。
如何在Windows 2000和Windows XP中使用set命令替代choice命令。
在下面的示例中,将提示用户输入1,2或3的选项以打印hello,bye或test。
@ECHO off cls :start ECHO. ECHO 1. Print Hello ECHO 2. Print Bye ECHO 3. Print Test set choice= set /p choice=Type the number to print text. if not '%choice%'=='' set choice=%choice:~0,1% if '%choice%'=='1' goto hello if '%choice%'=='2' goto bye if '%choice%'=='3' goto test ECHO "%choice%" is not valid, try again ECHO. goto start :hello ECHO HELLO goto end :bye ECHO BYE goto end :test ECHO TEST goto end :end
Microsoft Windows 2000和Windows XP中的用户可能难以通过MS-DOS提示符定义设置值。
查看英文版
如果要对用户隐藏所有目录,则可以使用:
SET DIRCMD=0
上面的命令可以防止任何人看到目录。但是,仍然可以访问它们。要使目录再次可见,请键入以下命令。
SET DIRCMD=
查看英文版
systemroot | systeminfo | sys | switches | sc | subst | start | sort | smartdrv | shutdown | shift | share | sfc | setver | setlocal | scandisk | scanreg | schtasks |
未知的网友