DOS 批處理 setlocal命令、endlocal命令詳解
在 cmd
(Windows 命令提示符) 腳本中,@setlocal
是一個常用的組合命令,由兩部分組成:@
和 setlocal
。
- @:在腳本中,
@
用于阻止命令的顯示。通常,在執(zhí)行批處理文件時,每一行命令都會被顯示出來。當你在一行命令前加上@
,這行命令就不會在命令提示符窗口中顯示出來。這經常用于使腳本的輸出更加干凈、整潔。 - setlocal:這是一個命令,它開始局部化環(huán)境更改。通常在批處理文件中使用,以確保在腳本中所做的任何環(huán)境更改(例如設置或修改環(huán)境變量)不會影響到調用此批處理的上下文或其他批處理文件。當腳本執(zhí)行完畢,使用
endlocal
命令可以結束這種局部環(huán)境,恢復所有的環(huán)境設置到setlocal
之前的狀態(tài)。
因此,@setlocal
的組合用途是在批處理文件的開始部分使環(huán)境更改局部化,同時不顯示這條命令本身。這是編寫批處理腳本時的一種常見做法,以確保腳本不會無意中修改全局環(huán)境設置。
一、setlocal命令
命令格式
setlocal [ enableExtensions | disableExtensions ] [ enableDelayedExpansion | disableDelayedExpansion ]
命令功能
setlocal 命令用于開始批處理文件中環(huán)境變量的本地化。本地化將持續(xù)到出現(xiàn)匹配的 endlocal 命令, 或者到達批處理文件結尾為止。
【enableExtensions參數(shù)】
啟用cmd.exe的命令擴展開特性。extension是“擴大,延伸”的意思
【disableExtensions參數(shù)】
關閉cmd.exe的命令擴展特性。
【enableDelayedExpansion參數(shù)】
開啟cmd.exe的變量延遲展開特性。expansion是“擴展,展開”的意思
【disableDelayedExpansionn參數(shù)】
關閉cmd.exe的變量延遲展開特性。
【注意】
enableExtensions參數(shù)、disableExtensions參數(shù)相比 cmd.exe的 /E參數(shù),它們具有更高的優(yōu)先級。
enableDelayedExpansion參數(shù)、 disableDelayedExpansion參數(shù)相比 cmd.exe的 /V參數(shù),它們具有更高的優(yōu)先級。
二、endlocal命令
命令格式:
endlocal
命令功能:
endlocal 命令用于結束批處理文件中環(huán)境變量的本地化。
【“環(huán)境變量本地化”的作用】
在批處理文件中實現(xiàn)“環(huán)境變量本地化”,可以避免其對外部運行環(huán)境的“污染”
示例
demo1.bat的內容如下:
::demo1.bat @echo off set var=200
demo2.bat的內容如下:
::demo2.bat @echo off setlocal set var=200 endlocal
運行
C:\>set var=5
C:\>demo1
C:\out>echo %var%
200
C:\>set var=5
C:\>demo2
C:\>echo %var%
5
C:\>
總結
setlocal命令和endlocal命令在批處理文件中有效(在dos命令行環(huán)境中無效)
setlocal命令執(zhí)行以前的所有變量狀態(tài)(例如:變量值), 在endlocal命令(或者批處理文件)執(zhí)行完后會被恢復
在setlocal和endlocal(或者批處理文件的結尾處)之間,如果定義了新變量,在執(zhí)行 endlocal命令后,該變量會被刪除(即:其值為空)
在setlocal和endlocal(或者批處理文件的結尾處)之間,可以正常使用setlocal命令執(zhí)行以前的所有變量(包括外部dos命令行環(huán)境定義的變量)
無參的setlocal命令和帶參的setlocal命令(例如:setlocal enabledelayedexpansion)都遵守上述規(guī)則
無參的setlocal命令只對變量所做的修改進行本地化,不會影響其作用域(setlocal和endlocal(或者批處理文件的結尾處)之間的局域空間)的命令擴展特性和變量延遲展開特性。
編寫批處理腳本時,為了不“污染”外部運行環(huán)境,同時對自己的運行環(huán)境進行“默認設置”,應該在批處理腳本中使用setlocal命令(和endlocal命令),下面是一個比較常用的“批處理腳本模板”
::demo.bat @echo off setlocal enableExtensions :: your code ... endlocal
寫作不易,如果您覺得對您有用
相關文章
全盤刪除所有文件夾下的_desktop.ini的批處理bat文件
這篇文章主要介紹了用批處理刪除所有盤的desktop.ini的代碼,需要的朋友可以參考下2007-08-08