DOS/BAT

关注公众号 jb51net

关闭
首页 > 脚本专栏 > DOS/BAT > cmd SETLOCAL

cmd SETLOCAL使用介绍

投稿:mdxy-dxy

SETLOCAL在bat中经常用作临时改变系统变量,以方便批处理的运行,但当ENDLOCAL后我们可以看到他又被还原成了系统的默认路径

SETLOCAL

在 cmd (Windows 命令提示符) 脚本中,@setlocal 是一个常用的组合命令,由两部分组成:@ 和 setlocal。

@:在脚本中,@ 用于阻止命令的显示。通常,在执行批处理文件时,每一行命令都会被显示出来。当你在一行命令前加上 @,这行命令就不会在命令提示符窗口中显示出来。这经常用于使脚本的输出更加干净、整洁。

setlocal:这是一个命令,它开始局部化环境更改。通常在批处理文件中使用,以确保在脚本中所做的任何环境更改(例如设置或修改环境变量)不会影响到调用此批处理的上下文或其他批处理文件。当脚本执行完毕,使用 endlocal 命令可以结束这种局部环境,恢复所有的环境设置到 setlocal 之前的状态。

因此,@setlocal 的组合用途是在批处理文件的开始部分使环境更改局部化,同时不显示这条命令本身。这是编写批处理脚本时的一种常见做法,以确保脚本不会无意中修改全局环境设置。

下面是帮助文档

C:\Documents and Settings\Administrator>setlocal /?
开始批处理文件中环境改动的本地化操作。在执行 SETLOCAL 之后
所做的环境改动只限于批处理文件。要还原原先的设置,必须执
行 ENDLOCAL。达到批处理文件结尾时,对于该批处理文件的每个
尚未执行的 SETLOCAL 命令,都会有一个隐含的 ENDLOCAL 被执行。

SETLOCAL

如果命令扩展名被启用,SETLOCAL 会如下改变:

SETLOCAL 批命令现在可以接受可选参数:
ENABLEEXTENSIONS / DISABLEEXTENSIONS
启动或停用命令处理器扩展名。详细信息,请参阅 CMD /?。
ENABLEDELAYEDEXPANSION / DISABLEDELAYEDEXPANSION
启动或停用延缓环境变量扩展名。详细信息,请
参阅 SET /? 。
无论在 SETLOCAL 命令之前它们的设置是什么,这些修改会一直
保留到匹配的 ENDLOCAL 命令。

如果有一个参数,SETLOCAL 命令将设置 ERRORLEVEL 的值。
如果有两个有效参数中的一个,该值则为零。用下列技巧,您
可以在批脚本中使用这个来决定扩展名是否可用:

VERIFY OTHER 2>nul
SETLOCAL ENABLEEXTENSIONS
IF ERRORLEVEL 1 echo Unable to enable extensions

这个方法之所以有效,是因为在 CMD.EXE 的旧版本上,SETLOCAL
不设置 ERRORLEVEL 值。具有不正确参数的 VERIFY 命令将
ERRORLEVEL 值初始化成非零值。

开始批处理文件中环境改动的本地化操作。在执行 SETLOCAL 之后所做的环境改动只限于批处理文件。要还原原先的设置,必须执行 ENDLOCAL。 达到批处理文件结尾时,对于该批处理文件的每个尚未执行的 SETLOCAL 命令,都会有一个隐含的 ENDLOCAL 被执行。

例:

@ECHO OFF
SET PATH /*察看环境变量PATH
PAUSE
SETLOCAL
SET PATH=E:\TOOLS /*重新设置环境变量PATH
SET PATH
PAUSE
ENDLOCAL
SET PATH

从上例我们可以看到环境变量PATH第1次被显示得时候是系统默认路径。被设置成了E:\TOOLS后显示为E:\TOOLS,但当ENDLOCAL后我们可以看到他又被还原成了系统的默认路径。但这个设置只在该批处理运行的时候有作用。当批处理运行完成后环境变量PATH将会还原。

您可能感兴趣的文章:
阅读全文