Windows 下環境變量設置(命令行)


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 就是進入批處理所在目錄

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM