[Windows] 環境變數的擴充功能

(注意:文中的百分號在存入時會造成其後文字都被截斷,因此改成全形的,實際使用時必須是半形才對)

問題:用Windows的排程在每天半夜自動備份檔案,備份檔名要帶當日月份與日期,例如:backup_0223.zip(前提是要完全用批次檔處理,不然自己寫程式當然就解決了)。

解法:

  1. 系統日期在DOS下可以用%DATE%環境變數取得
  2. 用類似 7z.exe a backup_%DATE%.zip d:dir1 的方式就完成了
  3. 結果並不像想的那麼單純。%DATE%傳回的是類似"2005/02/23 星期三"這樣的文字,
    其內的斜線(/)或減號(-)都是用做命令列的選項符號,這樣的組合可能會造成錯誤。

  4. 在此最簡單的方法便是用環境變數的擴充功能了:backup_%DATE:~5,2%.zip→取環境變數DATE的值,
    由第六碼開始取兩碼(由0開始算,第六碼要用5),組合後的檔名是backup_02.zip。

  5. 繼續取日期:backup_%DATE:~5,2%%DATE:~8,2%.zip→ 結果為backup_0223.zip
  6. 先用echo命令測試:echo backup_%DATE:~5,2%%DATE:~8,2%.zip
  7. 以上取子字串的位置會依控制台"地區及語言選項"內的日期格式設定而有不同
  8. Windows 2000與XP不清楚是否已有此擴充

這個環境變數的擴充功能幫我們節省許多時間,利用DOS命令 set /? 可以查詢到更多的擴充說明。
--------------------------------------------------------------------------------

環境變數取代功能已經有下列增強:

%PATH:str1=str2%

會將 PATH 環境變數展開,取代每個發現的 "str1" 與 "str2"的擴充結果。
"str2" 可以是空白字串,這會從擴充輸出中刪除全部 "str1"。"str1" 可以
用星號開始,這將會從擴充輸出的開頭開始,對應到從所有第一個發現含有
str1 的項目。

您也可以為擴充功能指定子字串。

%PATH:~10,5%

這將會擴充 PATH 環境變數,然後只使用擴充結果的第 11 個(位移 10)字元
後的 5 個字元如果長度未指定,將會預設為上次使用的變數值。如果數字(位
移或長度)是負數,使用的數字將會是環境變數的長度加上位移或指定長度。

%PATH:~-10%

將抽出 PATH 變數的最後 10 個字元。

%PATH:~0,-2%

將抽出 PATH 變數的最後 2 個字元。

最後,系統加入了延遲環境變數展開的支援。在預設狀態下,命令展開會啟
用這項支援,但是您可以在 CMD.EXE 用 /V 命令列參數來啟用/停用這個功
能。 請參看 CMD /?

##

您可能也會有興趣的類似文章

簡睿

服務於軟體業的資訊老兵。興趣廣泛,學習力佳,樂於分享所知所學。

您可能也會喜歡…

1 個回應

  1. nyust91mis表示:

    經測試 WIN 2000 PRO SP4 support 環境變數的擴充功能 tks~

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *