0. 背景
查了一下 SETX 命令可以實現,先簡單看了下幫助。以后再寫一個實例。
1. SETX /? 輸出內容:
SetX 有三種使用方式: 語法 1: SETX [/S system [/U [domain\]user [/P [password]]]] var value [/M] 語法 2: SETX [/S system [/U [domain\]user [/P [password]]]] var /K regpath [/M] 語法 3: SETX [/S system [/U [domain\]user [/P [password]]]] /F file {var {/A x,y | /R x,y string}[/M] | /X} [/D delimiters] 描述: 在用戶或系統環境創建或修改環境變量。能基於參數、注冊表項或文件輸 入設置變量。 參數列表: /S system 指定要連接到的遠程系統。 /U [domain\]user 指定應該在哪個用戶上下文執行命令。 /P [password] 指定給定用戶上下文的密碼。如果省略則 提示輸入。 var 指定要設置的環境變量。 value 指定分配給環境變量的值。 /K regpath 指定變量是基於注冊表項的信息而設置的。 路徑的格式應該是 hive\key\...\value。例如 HKEY_LOCAL_MACHINE\System\CurrentControlSet\ Control\TimeZoneInformation\StandardName。 /F file 指定要使用的文本文件的文件名。 /A x,y 指定絕對文件坐標(線 X,項目 Y)作為在此文件 里搜索的參數。 /R x,y string 指定有關“字符串”作為搜索參數的相對文件坐標。 /M 指定應該在系統 (HKEY_LOCAL_MACHINE) 環境中設 置此變量。在 HKEY_CURRENT_USER 環境下,默認 將設置此變量。 /X 用 x,y 坐標顯示文件內容。 /D delimiters 指定其他限定符,如 "," 或 "\"。 內置分隔符是空格、制表符、回車和換行符。所有 ASCII 字符都可作為限定符。限定符的最大數量, 包括內置分隔符,是 15。 /? 顯示此幫助消息。 注意: 1) SETX 在注冊表中將變量寫入主機環境。 2) 在本地系統,用此工具創建或修改的變量將在以后的命令窗口可用,但 在當前的 CMD.exe 命令窗口。 3) 在遠程系統,用此工具創建或修改的變量在下次登錄會話可用。 4) 有效的注冊表項數據類型是 REG_DWORD,REG_EXPAND_SZ,REG_SZ 和 REG_MULTI_SZ。 5) 受支持的配置單元: HKEY_LOCAL_MACHINE (HKLM), HKEY_CURRENT_USER (HKCU)。 6) 限定符區分大小寫。 7) REG_DWORD 的值是從注冊表里以十進制格式提取出來的。 示例: SETX MACHINE COMPAQ SETX MACHINE "COMPAQ COMPUTER" /M SETX MYPATH "%PATH%" SETX MYPATH ~PATH~ SETX /S system /U user /P password MACHINE COMPAQ SETX /S system /U user /P password MYPATH ^%PATH^% SETX TZONE /K HKEY_LOCAL_MACHINE\System\CurrentControlSet\ Control\TimeZoneInformation\StandardName SETX BUILD /K "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\CurrentBuildNumber" /M SETX /S system /U user /P password TZONE /K HKEY_LOCAL_MACHINE\ System\CurrentControlSet\Control\TimeZoneInformation\ StandardName SETX /S system /U user /P password BUILD /K "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\ CurrentVersion\CurrentBuildNumber" /M SETX /F ipconfig.out /X SETX IPADDR /F ipconfig.out /A 5,11 SETX OCTET1 /F ipconfig.out /A 5,3 /D "#$*." SETX IPGATEWAY /F ipconfig.out /R 0,7 Gateway SETX /S system /U user /P password /F c:\ipconfig.out /X
2. 另一篇參考博客,內容轉載如下: (PS:其實寫得不是太清爽 :))
通常設置環境變量需要通過Windows的“環境變量”對話框來設置,但是這樣比較麻煩。在CMD里面直接執行Set命令的話只對當前的session有效,CMD退出那么環境變量自動清除。 在Windows7里面可以通過SetX來設置用戶級以及系統級環境變量,其語法是: SETX Variable Value [-m] 其中-m表示為系統級(Machine environment, HKLM),默認為用戶級(User, HKCU) 需要注意的是,這樣設置的環境變量並不會在當前的CMD下生效,要想生效,必須重啟一個CMD。 將變量值設置為""(空字符串)並不會刪除這個變量,要想刪除需要執行 REG delete HKCU\Environment /V Variable (用戶級) 或者 REG delete "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /V Variable (系統級) 很明顯,刪除的時候使用對話框可能更方便些。 .bat文件中獲取bat文件所在目錄的參數為 %~dp0 %~dp0 “d”為Drive的縮寫,即為驅動器,磁盤、“p”為Path縮寫,即為路徑,目錄 cd是轉到這個目錄,不過我覺得cd /d %~dp0 還好些 選項語法: ~0 - 刪除任何引號("),擴充 %0 %~f0 - 將 %0 擴充到一個完全合格的路徑名(“f”是file,即文件) %~d0 - 僅將 %0 擴充到一個驅動器號 %~p0 - 僅將 %0 擴充到一個路徑 %~n0 - 僅將 %0 擴充到一個文件名(“n”是name 文件名) %~x0 - 僅將 %0 擴充到一個文件擴展名 %~s0 - 擴充的路徑只含有短名(“s”為Short,短的) %~a0 - 將 %0 擴充到文件的文件屬性(“a”為attribute,即屬性) %~t0 - 將 %0 擴充到文件的日期/時間(“t”time) %~z0 - 將 %0 擴充到文件的大小(Size 大小) %~$PATH:0 - 查找列在路徑環境變量的目錄,並將 %0 擴充 到找到的第一個完全合格的名稱。如果環境變量名 未被定義,或者沒有找到文件,此組合鍵會擴充到 空字符串 可以組合修飾符來得到多重結果: %~dp0 - 僅將 %0 擴充到一個驅動器號和路徑 %~nx0 - 僅將 %0 擴充到一個文件名和擴展名 %~fs0 - 僅將 %0 擴充到一個帶有短名的完整路徑名 %~dp$PATH:0 - 查找列在路徑環境變量的目錄,並將 %I 擴充 到找到的第一個驅動器號和路徑。 %~ftza0 - 將 %0 擴充到類似輸出線路的 DIR %0為當前批處理文件 如果0換成1為第一個文件,2為第2個 **************************************************** %0代指批處理文件自身 %~d0 是指批處理所在的盤符 %~dp0 是盤符加路徑 cd %~dp0 就是進入批處理所在目錄