所謂延遲變量擴展,實際上是指批處理運行命令時將變量擴展時機延遲到命令運行時,而不是加載時。
@echo off
set a=1
if %a%==1 set a=2 & echo %a%
pause
輸出結果爲:
1
原因是在 if 語句開始正式運行之前,批處理腳本引擎已經將該條語句擴展爲
if 1==1 set a=2 & echo 1
爲了避免%a%被過早擴展,我們就可以引入延遲變量擴展機制
@echo off & setlocal enabledelayedexpansion
set a=1
if %a%==1 set a=2 & echo !a!
pause
輸出結果爲:
2
上面例子中粗體的部分也可以看出延遲變量擴展的語法:
1. 使用 setlocal enabledelayedexpansion 啓用延遲變量擴展
2. 用 !a! 來使用變量 a; 注意 %a% 仍可使用,但會被過早擴展,即使已經啓用延遲變量擴展
@echo off & setlocal enabledelayedexpansion
set a=1
if %a%==1 set a=2 & echo %a%
pause
輸出結果爲:
1
除了上述用法之外,延遲變量擴展還可用於變量的嵌套,比如:
@echo off
set cd=5
set a=c
set b=d
echo %a%%b% ==> 輸出 cd
要輸出%a%%b%所指向的環境變量的值,就要啓用延遲變量擴展
@echo off & setlocal enabledelayedexpansion
set cd=5
set a=c
set b=d
echo !%a%%b%! ==> 輸出 5
下面是另外一個嵌套循環變量的例子
@echo off & setlocal enabledelayedexpansion
set a=abcdefghijk
for /l %%i in (1,1,10) do (
cls
echo !a:~0,%%i!
ping 10 127.1 > nul
)
pause
------------------------------------------------------------------------------
提示:在沒有開啓變量延遲的情況下,某條命令行中的變量改變,必須到下一條命令才能體現。這一點也可以加以利用,看例子。
例:交換兩個變量的值,且不用中間變量
@echo off
::目的:交換兩個變量的值,但是不使用臨時變量
set var1=abc
set var2=123
echo 交換前: var1=%var1% var2=%var2%
set var1=%var2%& set var2=%var1%
echo 交換後: var1=%var1% var2=%var2%
pause
常見環境變量
%ALLUSERSPROFILE% 局部 返回所有“用戶配置文件”的位置。
%APPDATA% 局部 返回默認情況下應用程序存儲數據的位置。
%CD% 局部 返回當前目錄字符串。
%CMDCMDLINE% 局部 返回用來啓動當前的 Cmd.exe 的準確命令行。
%CMDEXTVERSION% 系統 返回當前的“命令處理程序擴展”的版本號。
%COMPUTERNAME% 系統 返回計算機的名稱。
%COMSPEC% 系統 返回命令行解釋器可執行程序的準確路徑。
所謂的Windows系統目錄簡寫環境變量,就是爲一些常用且固定的Windows系統目錄的路徑建立一個與之對應的相對簡單的縮寫,使之更容易輸入或定位。
另外再記錄一下 Xcopy 的用法 XCOPY source [destination] [/A | /M] [/D[:date]] [/P] [/S [/E]] [/V] [/W] source 指定要複製的文件。 命令行開關 /Y 可以預先在 COPYCMD 環境變量中設置。 列如我要複製一個文件夾到C盤目錄下面可以用 XCOPY "xxx xx" "%SYSTEMDRIVE%" /Y /E |
在命令行中對環境變量進行編輯
查看當前可用的所有環境變量(=系統變量+用戶變量)
環境變量是由 Windows 可以使用的與符號名稱相關的環境信息(例如,驅動器、路徑或文件名)組成的字符串。它們控制着多種程序的行爲。例如,TEMP 環境變量指定程序放置臨時文件的位置。任何用戶都可以添加、修改或刪除用戶的環境變量。但是,只有管理員才能添加、修改或刪除系統環境變量。
一、添加或更改環境變量的數值
依次點擊“開始→設置→控制面板→性能和維護→系統”,彈出系統屬性對話框。點擊“高級”選項卡,接着單擊“環境變量”按鈕,這時會彈出”環境變量“對話框(如圖所示)。另外,你還可以通過鼠標右鍵點擊桌面上的“我的電腦”圖標,選擇“屬性”,然後打開“高級”選項卡,再點擊“環境變量”按鈕來打開“環境變量”對話框。在這裏你可以“新建”、“編輯”、“刪除”環境變量。
注意:如果不是以管理員身份登錄到本地計算機,則惟一能更改的環境變量是用戶變量。要更改系統變量則必須以管理員的身份登錄。對系統環境變量的修改將在下次啓動計算機時生效。
二、環境變量的應用實戰
妙用一:快速打開特定的目錄
在Windows有許多目錄是我們經常需要訪問的目錄,例如TEMP目錄,在這個目錄中存放有系統的臨時文件,我們經常要訪問該目錄,將其中的臨時文件清除,以提高系統的性能。通常情況下我們要打開TEMP目錄,必須首先啓動資源管理器,接着打開C盤,然後再找到Documents and Settings文件夾,打開以自己賬戶名命名的目錄,然後找到Local Settings目錄,最後纔是打開TEMP目錄。雖然TEMP目錄就在Local Settings目錄下,但是默認情況下,Local Settings目錄具有隱藏屬性,我們是看不到該目錄的。還必須點擊資源管理器菜單欄中的“工具→文件夾選項”命令,在文件夾選項對話框中點擊“查看”選項卡,然後選中“顯示所有文件和文件夾”才能夠看到Local Settings目錄。可見,要打開TEMP目錄十分的麻煩。
但是如果你熟悉環境變量,那麼你完全可以利用環境變量來快速地打開TEMP目錄。點擊“開始→運行”,在彈出的運行對話框中輸入“%temp%”(實際輸入時不包括外側的雙引號,下同)或者輸入“%TMP”,回車後就可以立以資源管理器的形式打開“C:/Documents and Settings/qs/Local Settings/Temp”目錄了。
另外,你還可以舉一反三:
要打開Windows目錄,就在運行對話框中輸入“%systemroot%”;
要打開Windows目錄下的TEMP目錄,就在運行對話框中輸入“TEMP”。
妙用二 讓多操作系統共享應用程序
現如今,安裝多操作系統的朋友是越來越多了,多操作系統有多操作系統的好處,但弊端也很明顯,在甲操作系統中安裝的所有應用程序,到了乙操作系統中幾乎全都消失得無影無蹤了。要使用這些應用程序不得不在每一個操作系統中都重新安裝一遍。這樣問題是解決了,但要消耗大量的硬盤空間,着實地讓你心疼。其實,巧妙地利用環境變量,我們就可以讓多操作系統共享應用程序,而不需要在每一個操作系統中都重新安裝。
下面以在C盤安裝有Windows 98,後來又在D盤安裝了Windows 2000,並且所有的應用程序都是在Windows 98中安裝的爲例加以說明。
第一步,Windows 2000 安裝好後,進入到C盤的“C:/Program Files”目錄中,依次展開各個應用程序文件夾,找到應用程序的可執行性文件,點右鍵,選擇右鍵菜單中的“發送到→桌面快捷方式”,這樣各個應用程序的桌面快捷方式就建立好了。
第二步,試着點擊桌面上的各個快捷方式,看各個應用程序能不能正常運行,這時你會發現有些應用程序可以正常運行(如:ACDSee、Foxmail、WPS 2000等),而有些需要重新輸入序列號進行註冊纔可以正常運行(如:WinZip、Dreamweaver、Firework、Flash、CuteFTP等),特別是有些程序(如:Photoshop等)打開後彈出一系列對話框,顯示無法找到*****動態鏈接庫以及無法找到指定的路徑*****等等信息,但只要一路單擊“確定”,仍然能夠打開。今天我們講的就是這種啓動出現錯誤提示的程序,巧妙利用環境變量可以讓這些錯誤提示不再出現,並且可以讓應用程序正常使用。
圖1
第三步,在Windows 2000的桌面上,右鍵點擊桌面上的“我的電腦”圖標,選擇“屬性”,然後打開“高級”選項卡,再點擊“環境變量”按鈕打開“環境變量”對話框。在“系統變量”列表框中找到“Path”變量,點擊“編輯”按鈕,在彈出的“編輯系統變量”對話框,我們可以看到“變量值”文本框中已經存在以下內容:“%SystemRoot%/system32;%SystemRoot%;%SystemRoot%/System32/Wbem”,保持原有內容不變,在後面加上以下內容:“;C:/WINDOWS;C:/WINDOWS/SYSTEM;C:/WINDOWS/SYSTEM32”,點“確定”按鈕,然後重新啓動計算機,雙擊Photoshp.exe時,你便會發現再也沒有前面列舉的那些對話框了。
圖2
妙用三 讓設備管理器顯示出更多的設備細節
按照上述方法進入到“環境變量”對話框中,點“新建”按鈕,彈出“新建用戶變量”對話框,如圖1所示,在“變量名”文本框中輸入“devmgr_show_details”,在“變量值”文本框中輸入“1”,點“確定”按鈕,並關閉系統屬性對話框。
好了,現在啓動設備管理器,雙擊某一個具體的設備,彈出“屬性”窗口,仔細看一下,是不是多出了一個“詳細信息”的選項卡,如圖2所示。裏面的選項十分豐富,可以幫助用戶詳細瞭解硬件設備的具體參數。
另外,如果你只是臨時想使用一下“詳細信息”選項卡,只要在“運行”對話框中輸入“CMD”,打開命令提示符窗口,輸入“set devmgr_show_details=1”,然後再輸入“start devmgmt.msc”,如圖3所示,即可爲設備管理器添加“詳細信息”選項卡,但這只是臨時的,待下次重啓設備管理器時“詳細信息”選項卡將不再出現。
圖3
環境變量系列應用(三)
妙用四:讓故障恢復控制檯更強大
現在玩多操作系統的朋友越來越多了,衆所周知,利用Windows 2000/XP/2003操作系統的故障恢復控制檯可以快速有效地解決Windows自身和多操作系統引導過程中發生的各種各樣的故障。因此,故障恢復控制檯被許多用戶喻爲系統的救命稻草。但是,默認情況下系統會對故障恢復控制檯做出許多的限制,例如:不允許訪問驅動器和文件夾,不允許進行軟盤複製和訪問等等。這對我們在故障恢復控制檯下進行系統的維護修復工作造成了很大的不便。你可以利用環境變量輕鬆解除這些限制。
當你在故障恢復控制檯下工作時,如遇到限制感到不便時,在命令提示符下鍵入以下命令,即可解除限制:
Set AllowAllPaths = TRUE ——允許訪問所有文件和目錄 ;
Set AllowWildCards = TRUE——允許在命令行中使用通配符 ;
Set AllowRemovableMedia = TRUE——允許將文件複製到可移動存儲介質中;
Set NoCopyPrompt = TRUE——覆蓋現有文件時不顯示提示;
好了,現在你在故障恢復控制檯下已經有足夠的自由了。需要說明的是通過Set命令設置的環境變量只對當前的故障恢復控制檯有效,下次重新引導使用故障恢復控制檯時,必須重新利用Set命令設置環境變量。 另外,Set命令的用法和當前所有的環境變量用戶可以在命令提示符後鍵入Set來獲得。