批處理之延遲環境變量擴展

所謂延遲變量擴展,實際上是指批處理運行命令時將變量擴展時機延遲到命令運行時,而不是加載時。

@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% 系統 返回命令行解釋器可執行程序的準確路徑。

 %DATE% 系統 返回當前日期。使用與 date /t 命令相同的格式。由 Cmd.exe 生成。有關 date 命令的詳細信息,請參閱 Date。
  %ERRORLEVEL% 系統 返回最近使用過的命令的錯誤代碼。通常用非零值表示錯誤。
  % HOMEDRIVE% 系統 返回連接到用戶主目錄的本地工作站驅動器號。基於主目錄值的設置。用戶主目錄是在“本地用戶和組”中指定的。
  %HOMEPATH% 系統 返回用戶主目錄的完整路徑。基於主目錄值的設置。用戶主目錄是在“本地用戶和組”中指定的。
  %HOMESHARE% 系統 返回用戶的共享主目錄的網絡路徑。基於主目錄值的設置。用戶主目錄是在“本地用戶和組”中指定的。
  %LOGONSEVER% 局部 返回驗證當前登錄會話的域控制器的名稱。
  %NUMBER_OF_PROCESSORS% 系統 指定安裝在計算機上的處理器的數目。
  %OS% 系統 返回操作系統的名稱。Windows 2000 將操作系統顯示爲 Windows_NT。
  %PATH% 系統 指定可執行文件的搜索路徑。
  %PATHEXT% 系統 返回操作系統認爲可執行的文件擴展名的列表。
  %PROCESSOR_ARCHITECTURE% 系統 返回處理器的芯片體系結構。值: x86,IA64。
  %PROCESSOR_IDENTFIER% 系統 返回處理器說明。
  %PROCESSOR_LEVEL% 系統 返回計算機上安裝的處理器的型號。
  %PROCESSOR_LEVEL% 系統 返回處理器的版本號。
  %PROMPT% 局部 返回當前解釋程序的命令提示符設置。由 Cmd.exe 生成。
  %RANDOM% 系統 返回 0 到 32767 之間的任意十進制數字。由 Cmd.exe 生成。
  %SYSTEMDRIVE% 系統 返回包含 Windows XP 根目錄(即系統根目錄)的驅動器。
  %SYSTEMROOT% 系統 返回 Windows XP 根目錄的位置。
  %TEMP% and %TMP% 系統和用戶 返回對當前登錄用戶可用的應用程序所使用的默認臨時目錄。有些應用程序需要 TEMP,而其它應用程序則需要 TMP。
  %TIME% 系統 返回當前時間。使用與 time /t 命令相同的格式。由 Cmd.exe 生成。有關 time 命令的詳細信息,請參閱 Time。
  %USERDOMAIN% 局部 返回包含用戶帳戶的域的名稱。
  %USERNAME% 局部 返回當前登錄的用戶的名稱。
  %UserPrefix% 局部 返回當前用戶的配置文件的位置。
  %WINDIR% 系統 返回操作系統目錄的位置。
      
         
       Windows 常見的系統目錄簡寫環境變量
 

        所謂的Windows系統目錄簡寫環境變量,就是爲一些常用且固定的Windows系統目錄的路徑建立一個與之對應的相對簡單的縮寫,使之更容易輸入或定位。

  Windows系統默認情況下都是安裝在電腦C盤的Windows目錄下,但這並不是固定的,如果你的系統不是安裝在這個目錄下,那麼程序想要定位你的某個系統目錄的話,就需要使用到目錄簡寫環境變量了。使用這些環境變量,程序員或系統管理員無需事先了解你的系統安裝位置,就能輕易的找到所要使用的系統目錄路徑。

  下面,我就來爲大家介紹一些常見的Windows系統目錄簡寫環境變量

  %SYSTEMDRIVE%

  這代表的是Windows系統所在磁盤分區,也就是Windows系統所安裝到的盤符根目錄,通常就是C盤的根目錄了。

  %HOMEDRIVE%

  這和上面介紹的%SYSTEMDRIVE%的功能是一樣的。

  %SYSTEMROOT%

  它所指向的是Windows系統所在的目錄,通常就是C:/Windows。

  %WINDIR%

  和%SYSTEMROOT%的功能相同,指向Windows所在目錄。

  %ProgramFiles%

  指向Program Files的路徑,通常情況下是C:/Program Files。

  %CommonProgramFiles%

  指向公用文件(Common Files)目錄,通常是C:/Program Files/Common Files。

  %USERPROFILE%

  指向當前帳戶的用戶目錄,通常是C:/Documents and Settings/當前用戶名。

  %HOMEPATH%

  功能和上面的%USERPROFILE%是一樣的。

  %ALLUSERSPROFILE%

  指向所有用戶的用戶目錄,通常是C:/Documents and Settings/All Users。

  %APPDATA%

  指向當前用戶的Application Data目錄,通常是C:/Documents and Settings/當前用戶名/Application Data。

  很多文章都會介紹一個叫做%ALLAPPDATA%的變量,說它是指向C:/Documents and Settings/All Users/Application Data的,但其實這個變量並不能使用。

  %TEMP%

  它指向的是當前用戶的臨時文件目錄,通常是C:/Documents and Settings/當前用戶名/Local Settings/Temp。

  %TMP%

  與%TEMP%的指向相同。

  %ComSpec%

  指向C:/WINDOWS/System32/cmd.exe,也就是命令提示符。

 

另外再記錄一下 Xcopy 的用法

XCOPY source [destination] [/A | /M] [/D[:date]] [/P] [/S [/E]] [/V] [/W]
                           [/C] [/I] [/Q] [/F] [/L] [/G] [/H] [/R] [/T] [/U]
                           [/K] [/N] [/O] [/X] [/Y] [/-Y] [/Z]
                           [/EXCLUDE:file1[+file2][+file3]...]

source       指定要複製的文件。
destination 指定新文件的位置和/或名稱。
/A           只複製有存檔屬性集的文件,
               但不改變屬性。
/M           只複製有存檔屬性集的文件,
               並關閉存檔屬性。
/D:m-d-y     複製在指定日期或指定日期以後更改的文件。
               如果沒有提供日期,只複製那些源時間
               比目標時間新的文件。
/EXCLUDE:file1[+file2][+file3]...
               指定含有字符串的文件列表。每一個字符串
               必須在文件的單獨行中。如果有任何
               字符串與要被複制的文件的絕對路徑
               相符,那個文件將不會得到複製。
               例如,指定如 /obj/ 或 .obj 的字符串會排除
               目錄 obj 下面的所有文件或帶有
               .obj 擴展名的文件。
/P           創建每個目標文件前提示。
/S           複製目錄和子目錄,除了空的。
/E           複製目錄和子目錄,包括空的。
               與 /S /E 相同。可以用來修改 /T。
/V           驗證每個新文件。
/W           提示您在複製前按鍵。
/C           即使有錯誤,也繼續複製。
/I           如果目標不存在,又在複製一個以上的文件,
               則假定目標一定是一個目錄。
/Q           複製時不顯示文件名。
/F           複製時顯示完整的源和目標文件名。
/L           顯示要複製的文件。
/G           允許將沒有經過加密的文件複製到
               不支持加密的目標。
/H           也複製隱藏和系統文件。
/R           覆蓋只讀文件。
/T           創建目錄結構,但不復制文件。
               不包括空目錄或子目錄。/T /E 包括
               空目錄和子目錄。
/U           只複製已經存在於目標中的文件。
/K           複製屬性。一般的 Xcopy 會重置只讀屬性。
/N           用生成的短名複製。
/O           複製文件所有權和 ACL 信息。
/X           複製文件審覈設置(隱含 /O)。
/Y           複製文件審覈設置(隱含 /O)。
               現存目標文件。
/-Y          導致提示以確認改寫一個
               現存目標文件。
/Z            用重新啓動模式複製網絡文件。

命令行開關 /Y 可以預先在 COPYCMD 環境變量中設置。
這可能被命令行上的 /-Y 改寫。

列如我要複製一個文件夾到C盤目錄下面可以用

XCOPY "xxx xx" "%SYSTEMDRIVE%" /Y /E

   
  

在命令行中對環境變量進行編輯


   查看當前可用的所有環境變量(=系統變量+用戶變量)

  查看某個環境變量,如PATH
  set PATH
  添加環境變量,如xxx=aa
  set xxx=aa
  將環境變量(如xxx)的值置爲空
  set xxx=
  在某個環境變量(如PATH)後添加新的值(如d:/xxx)
  set PATH=%PATH%;d:/xxx
  (注:在dos窗口中以命令行方式對環境變量的操作只對當前窗口的應用有效)

百度百科中的詞條內容僅供參考,如果您需要解決具體問題
(尤其在法律、醫學等領域),建議您諮詢相關領域專業人士。
本詞條對我有幫助416
 
              環境變量系列應用(一)

  環境變量是由 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來獲得。
發佈了46 篇原創文章 · 獲贊 4 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章