Dos指令之SET指令ITeye - 千亿集团

Dos指令之SET指令ITeye

2019年03月14日08时38分24秒 | 作者: 旭彬 | 标签: 指令,环境变量,扩展 | 浏览: 2889

来历:

 

Windows的set dos指令的作用是显现、设置或删去cmd.exe环境变量。在日常开发中一般需求动态设置环境变量,如:tomcat中在start.bat文件中动态设置java_home和catalina_home环境变量。如下:

...

if "%OS%" "Windows_NT" setlocal

rem -

rem Start script for the CATALINA Server

rem

rem $Id: startup.bat 908749 2010-02-10 23:26:42Z markt $

rem -

 

set JAVA_HOME=D:\ProgrammingSoftware\JDK6

set CATALINA_HOME=D:\tomcat_server\tomcat6.0.24

...

 

SET指令:

描绘:显现、设置或删去 cmd.exe 环境变量。

语法:

    SET [variable=[string]]

阐明:

    variable   指定环境变量名。

    string     指定要指派给变量的一系列字符串。

留意:要显现当时环境变量,键入不带参数的 SET。

 

假如指令扩展被启用,SET 会如下改动:

1、可仅用一个变量激活 SET 指令,等号或值不显现一切前缀匹配SET指令已运用的称号的一切变量的值。例如:

1

SET P

会显现一切以字母 P 打头的变量。假如在当时环境中找不到该变量称号,SET 指令将把 ERRORLEVEL设置成 1。SET 指令不答应变量名含有等号。

 

2、在 SET 指令中添加了两个新指令行开关:

SET /A expression

SET /P variable=[promptString]

/A 指令行开关

    指定等号右边的字符串为被评价的数字表达式。该表达式评价器很简单并以递减的优先权次序支撑下列操作:

        ()                  - 分组

        ! ~ -               - 一元运算符

        * / %               - 管用运算符

        + -                 - 管用运算符

                      - 逻辑移位

                            - 按位“与”

        ^                   - 按位“异”

        |                   - 按位“或”

        = *= /= %= += -=    - 赋值

        = ^= |= = =

        ,                   - 表达式分隔符

 

a、假如您运用任何逻辑或取余操作符,您需求将表达式字符串用引号括起来。/A指令开关比如如下:

@echo off

set /A val="1+2+3+4+5"

echo %val%

 

set /A "val=1+2+3+4+5"

echo %val%

 

set /A "val=12,version=1"

echo %val%

echo %version%

上面会将“1+2+3+4+5”的值核算后赋值给val(val=15),然后输出到屏幕(echo %val%)。

 

b、在表达式中的任何非数字字符串键作为环境变量称号,这些环境变量称号的值已在运用前转换成数字。

假如指定了一个环境变量称号,但未在当时环境中界说,那么值将被定为零。如下:

@echo off

set /A "v=c"

echo %v%

rem v等于0

这使您能够运用环境变量值做核算而不必键入那些 % 符号来得到它们的值。如下:

@echo off

set c=12

set /A "v=c"

echo %v%

rem v等于12

假如 SET /A 在指令脚本外的指令行履行的,那么它显现该表达式的最终值。该分配的操作符在分配的操作符左面需求一个环境变量称号。除了十六进制有 0x 前缀,八进制有 0 前缀的,数字值为十进位数字。因而,0x12 与 18 和 022 相同。请留意八进制公式或许很简单搞混: 08 和 09 是无效的数字,由于 8 和 9 不是有用的八进制位数。如下:

 

 

/P 指令行开关

    答应将变量数值设成用户输入的一行输入。读取输入行之前,显现指定的 promptString。promptString 可所以空的。如:

@echo off

set /p b=输入一个数字:

echo %b%

set /a a=2*%b%

echo %b%+%b%=%a%

pause nul

 

环境变量替换已如下增强:

1

%PATH:str1=str2%

        会扩展 PATH 环境变量,用 "str2" 代替扩展成果中的每个 "str1"。要有用地从扩展成果中删去一切的 "str1","str2" 可所以空的。"str1" 能够以星号打头;在这种情况下,"str1" 会从扩展成果的开端到 str1 剩下部分第一次呈现的当地,都一向坚持般配。

 

能够为扩展名指定子字符串:

1

%PATH:~10,5%

        会扩展 PATH 环境变量,然后只运用在扩展成果中从第 11 个(偏移量 10)字符开端的五个字符。假如没有指定长度,则选用默认值,即变量数值的余数。假如两个数字(偏移量和长度)都是负数,运用的数字则是环境变量数值长度加上指定的偏移量或长度。

1

%PATH:~-10%

        会提取 PATH 变量的最终十个字符。

1

%PATH:~0,-2%

        会提取 PATH 变量的一切字符,除了最终两个。

 

推迟环境变量扩大的支撑:

        总算添加了推迟环境变量扩大的支撑。该支撑总是按默认值被停用,但也能够经过 CMD.EXE 的 /V 指令行开关而被启用/停用。请参阅 CMD /?

        考虑到读取一行文本时所遇到的现在扩大的约束时,推迟环境变量扩大是很有用的,而不是履行的时分。以下比如阐明直接变量扩大的问题:

set VAR=before

if "%VAR%" "before" (

    set VAR=after

    if "%VAR%" "after" @echo If you see this, it worked

)

        不会显现音讯,由于在读到第一个 IF 句子时,BOTH IF 句子中的 %VAR% 会被代替;原因是: 它包括 IF 的文体,IF 是一个复合句子。所以,复合句子中的 IF 实际上是在比较 "before" 和"after",这两者永久不会持平。相同,以下这个比如也不会到达预期作用:

set LIST=

for %i in (*) do set LIST=%LIST% %i

echo %LIST%

        原因是,它不会在现在的目录中树立一个文件列表,而仅仅将LIST 变量设成找到的最终一个文件。这也是由于 %LIST% 在FOR 句子被读取时,只被扩大了一次;并且,那时的 LIST 变量是空的。因而,咱们真实履行的 FOR 循环是:

1

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% - 扩展到调用指令处理器的原始指令行。

    %HIGHESTNUMANODENUMBER% - 扩展到此核算机上的最高 NUMA 节点号

 

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表千亿集团立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章