SET命令的用法

2021-04-17 16:26:48 字數 3543 閱讀 5901

c:/documents and settings/huojun_xu>set /?

顯示、設定或刪除 cmd.exe 環境變數。

set [variable=[string]]

variable  指定環境變數名。

string    指定要指派給變數的一系列字串。

要顯示當前環境變數,鍵入不帶引數的 set。

如果命令副檔名被啟用,set 會如下改變:

可僅用乙個變數啟用 set 命令,等號或值不顯示所有字首匹配

set 命令已使用的名稱的所有變數的值。例如:

set p

會顯示所有以字母 p 打頭的變數

如果在當前環境中找不到該變數名稱,set 命令將把 errorlevel

設定成 1。

set 命令不允許變數名含有等號。

在 set 命令中新增了兩個新命令列開關:

set /a expression

set /p variable=[promptstring]

/a 命令列開關指定等號右邊的字串為被評估的數字表示式。該表示式

評估器很簡單並以遞減的優先權順序支援下列操作:

()                  - 分組

! ~ -               - 一元運算子

* / %               - 算數運算子

+ -                 - 算數運算子

<< >>               - 邏輯移位

- 按位「與」

^                   - 按位「異」

|                   - 按位「或」

= *= /= %= += -=    - 賦值

&= ^= |= <<= >>=

,                   - 表示式分隔符

如果您使用任何邏輯或取餘操作符, 您需要將表示式字串用

引號擴起來。在表示式中的任何非數字字串鍵作為環境變數

名稱,這些環境變數名稱的值已在使用前轉換成數字。如果指定

了乙個環境變數名稱,但未在當前環境中定義,那麼值將被定為

零。這使您可以使用環境變數值做計算而不用鍵入那些 % 符號

來得到它們的值。如果 set /a 在命令指令碼外的命令列執行的,

那麼它顯示該表示式的最後值。該分配的操作符在分配的操作符

左邊需要乙個環境變數名稱。除十六進製制有 0x 字首, 八進位制

有 0 字首的,數字值為十進位數字。因此, 0x12 與 18 和 022

相同。請注意八進位制公式可能很容易搞混: 08 和 09 是無效的數字,

因為 8 和 9 不是有效的八進位制位數。

/p 命令列開關允許將變數數值設成使用者輸入的一行輸入。讀取輸入

行之前,顯示指定的 promptstring。promptstring 可以是空的。

環境變數替換已如下增強:

%path:str1=str2%

會擴充套件 path 環境變數,用 "str2" 代替擴充套件結果中的每個 "str1"。

要有效地從擴充套件結果中刪除所有的 "str1","str2" 可以是空的。

"str1" 可以以星號打頭;在這種情況下,"str1" 會從擴充套件結果的

開始到 str1 剩餘部分第一次出現的地方,都一直保持相配。

也可以為副檔名指定子字串。

%path:~10,5%

會擴充套件 path 環境變數,然後只使用在擴充套件結果中從第 11 個(偏

移量 10)字元開始的五個字元。如果沒有指定長度,則採用預設

值,即變數數值的餘數。如果兩個數字(偏移量和長度)都是負數,

使用的數字則是環境變數數值長度加上指定的偏移量或長度。

%path:~-10%

會提取 path 變數的最後十個字元。

%path:~0,-2%

會提取 path 變數的所有字元,除了最後兩個。

終於新增了延遲環境變數擴充的支援。該支援總是按預設值被

停用,但也可以通過 cmd.exe 的 /v 命令列開關而被啟用/停用。

請參閱 cmd /?

考慮到讀取一行文字時所遇到的目前擴充的限制時,延遲環境

變數擴充是很有用的,而不是執行的時候。以下例子說明直接

變數擴充的問題:

set var=before

if "%var%" == "before" (

set var=after

if "%var%" == "after" @echo if you see this, it worked

)不會顯示訊息,因為在讀到第乙個 if 語句時,both if 語句中

的 %var% 會被代替;原因是: 它包含 if 的文體,if 是乙個

復合語句。所以,復合語句中的 if 實際上是在比較 "before" 和

"after",這兩者永遠不會相等。同樣,以下這個例子也不會達到

預期效果:

set list=

for %i in (*) do set list=%list% %i

echo %list%

原因是,它不會在目前的目錄中建立乙個檔案列表,而只是將

list 變數設成找到的最後乙個檔案。這也是因為 %list% 在

for 語句被讀取時,只被擴充了一次;而且,那時的 list 變數

是空的。因此,我們真正執行的 for 迴圈是:

for %i in (*) do set list= %i

這個迴圈繼續將 list 設成找到的最後乙個檔案。

延遲環境變數擴充允許您使用乙個不同的字元(驚嘆號)在執行

時間擴充環境變數。如果延遲的變數擴充被啟用,可以將上面

例子寫成以下所示,以達到預期效果:

set var=before

if "%var%" == "before" (

set var=after

if "!var!" == "after" @echo if you see this, it worked

)set list=

for %i in (*) do set list=!list! %i

echo %list%

如果命令副檔名被啟用,有幾個動態環境變數可以被擴充套件,但

不會出現在 set 顯示的變數列表中。每次變數數值被擴充套件時,

這些變數數值都會被動態計算。如果使用者用這些名稱中任何

乙個定義變數,那個定義會替代下面描述的動態定義:

%cd% - 擴充套件到當前目錄字串。

%date% - 用跟 date 命令同樣的格式擴充套件到當前日期。

%time% - 用跟 time 命令同樣的格式擴充套件到當前時間。

%random% - 擴充套件到 0 和 32767 之間的任意十進位制數字。

%errorlevel% - 擴充套件到當前 errorlevel 數值。

%cmdextversion% - 擴充套件到當前命令處理器副檔名版本號。

%cmdcmdline% - 擴充套件到呼叫命令處理器的原始命令列。

範例應用:

1、檢視當前使用者登入到哪台dc?  set l

2、檢視當前使用者的配置信處?   set u

Linux命令set的某些用法

在linux下可以 help set 檢視set命令的幫助 root localhost help set set set abefhkmnptuvxbchp o option name arg set or unset values of shell options and positional ...

bat的變數與命令set的用法

set 功能一覽 設定變數 格式 set 變數名 變數值 詳細 被設定的變數以 變數名 引用 取消變數 格式 set 變數名 詳細 取消後的變數若被引用 變數名 將為空 展示變數 格式 set 變數名 詳細 展示以變數名開頭的所有變數的值 列出所有可用的變數 格式 set 計算器 格式 set a ...

bat的變數與命令set的用法

set 功能一覽 設定變數 格式 set 變數名 變數值 詳細 被設定的變數以 變數名 引用 取消變數 格式 set 變數名 詳細 取消後的變數若被引用 變數名 將為空 展示變數 格式 set 變數名 詳細 展示以變數名開頭的所有變數的值 列出所有可用的變數 格式 set 計算器 格式 set a ...