命令提示字元 10:變數指令

在命令提示字元中,就是「set」啦:

set

這麼龐大的一串要怎麼開始也是一個大問題,先從簡單的開始好了:

set var=5

嗯,它就是設定一個變數嘛!但要注意一下:變數在命令提示字元是用二個百分比夾在一起的,這在之前已經說過了;另外變數的取代是在執行那一瞬間變成變數的值,如範例中是到執行時才把「%var%」變成「5」;最後也要注意等於二邊是沒有空白的。

set "var=Test string."

字串的部份請用「"」括起來,說明裡面是沒有說啦,但做一下會比較好。

set /p var=

「/p」的意義就是請使用者自行輸入變數,當然在這裡拿來做例子很奇怪,但在批次檔就不一樣了,它變的很好用。另外「/a」:

set /a var=3+5

呃,其實要很坦白的說,沒用過。在說明裡面有提到其它運算子,會用到的時候再查就好了。



來個久違的分隔線,因為接下來要進入另一個領域。命令提示字元為了使用者方便,一開始設定了很多環境變數,顯示方法如下:

set

這些列出來的有一大半下一章再說,而若要只顯示某個字母開頭的話:

set p

先來看幾個比較重要的:

echo %os%

第一個就先看不重要的,呃,好啦,它是代表本身的作業系統,為何是「Windows NT」呢?因為 Windows NT 是 Windows® 7 血統的始祖,所以含 Windows® XP 其實也都可以叫 Windows® NT。講古結束,下一個:

echo %processor_architecture%

這個指令會有個問題,他顯示的不是這台電腦的中央處理器架構,而是目前執行的 cmd.exe 的架構。也就是說,如果在 64 位元的作業系統中執行 32 位元的 cmd.exe,他會出現「x86」。要正確的顯示正確架構,要用登錄檔,這裡有解法。

echo %cd%

這個就回到說明了,不在 set 清單裡面。這個就是顯示目前執行的路徑,會用到的時候要注意。

echo %date%

這個就是顯示目前的日期,就不用再使用 date 指令了。這個指令也受日期格式而有所不同,這也需要注意。如果需要完整頡取時間,請用這個指令。

echo %time%

這個就是顯示目前的時間,就不用再使用 time 指令了。這個指令也受時間格式而有所不同,這也需要注意。如果需要完整頡取時間,請用這個指令。

echo %random%

就是取一個 0 到 32767 的變數啦,如要指定範圍,就要用到「/a」,如「set /a var=%random%%100」。

echo %errorlevel%

「%errorlevel%」是來看上個指令有沒有執行成功,成功會是回傳「0」,失敗則是其他值。一個完整的程式會一直不斷看「%errorlevel%」有沒有異常,不過那真得很累就是了。



補充一下,若要變成全域變數可以使用「setlocal」:

setlocal

他正規是配合「endlocal」一起使用,但連設定成全域變數都很少在用了,有需要的人可以去 ss64.com 看。



說明裡面有提到展開變數的部份,在後面會開一章提。「set」要用到的清一色都是基本的東西,但很多時候要寫複雜的東西還是可能會用到下面的部份,所以還是要知道比較好。下一章說好要來解釋其它變數了,要來解釋整個 Windows® 基本目錄架構。



下一章:目錄變數




  • 2012-09-11 初次發佈。
  • 2017-07-12 更新成 Windows 10 的版本。

5 則留言:

  1. 請問版主
    在設定變數的那個區塊
    數字有range嗎?
    還是打多少就多少?

    回覆刪除
    回覆
    1. 在網路上沒有人在討論這個問題耶

      大部份的情況下 set 會把輸入的東西視為字串
      不會把他看成數字
      就只有在下運算的指令才會

      所以如果要輸入極限的話應該是它可以輸入字串的極限
      不過實際在寫批次檔時這個問題不大
      這點可以放心

      刪除
    2. 那有可能變這樣嗎?
      EX:str1=aaaa str2=bbbb
      var=str1+str2
      然後輸出跑出var=aaaabbbb

      刪除
    3. set str1=aaaa
      set str2=bbbb
      set var=%str1%%str2%

      看得出來有學過其他語言的基礎
      命令提示字元或 Bash 絕對比想像的還簡單很多
      只是手法沒有像其他語言嚴謹而己

      刪除

定時會整理。