1. 程式人生 > >DOS批處理高階教程(三) : 批處理變數和set命令詳解

DOS批處理高階教程(三) : 批處理變數和set命令詳解

前言

這裡主要是帶著過一下相關的簡單概念和用法, 是對於有一定的基礎和編寫指令碼經驗的同學而言, 那麼一般下面的用法都是一眼看出作用和原理起到一個複習的作用。對於不熟悉的可以查詢相關命令和百度即可。

第四章 批處理中的變數

批處理中的變數,我把他分為兩類,分別為”系統變數”和”自定義變數”

一、系統變數

他們的值由系統將其根據事先定義的條件自動賦值,也就是這些變數系統已經給他們定義了值,
不需要我們來給他賦值,我們只需要呼叫而以!


  • %ALLUSERSPROFILE% 本地 返回“所有使用者”配置檔案的位置。
  • %APPDATA% 本地 返回預設情況下應用程式儲存資料的位置。
  • %CD% 本地 返回當前目錄字串。
  • %CMDCMDLINE% 本地 返回用來啟動當前的 Cmd.exe 的準確命令列。
  • %CMDEXTVERSION% 系統 返回當前的“命令處理程式擴充套件”的版本號。
  • %COMPUTERNAME% 系統 返回計算機的名稱。
  • %COMSPEC% 系統 返回命令列直譯器可執行程式的準確路徑。
  • %DATE% 系統 返回當前日期。使用與 date /t 命令相同的格式。由 Cmd.exe 生成。有關
  • date 命令的詳細資訊,請參閱 Date。
  • %ERRORLEVEL% 系統 返回上一條命令的錯誤程式碼。通常用非零值表示錯誤。
  • %HOMEDRIVE% 系統 返回連線到使用者主目錄的本地工作站驅動器號。基於主目錄值而設定。使用者主目錄是在“本地使用者和組”中指定的。
  • %HOMEPATH% 系統 返回使用者主目錄的完整路徑。基於主目錄值而設定。使用者主目錄是在“本地使用者和組”中指定的。
  • %HOMESHARE% 系統 返回使用者的共享主目錄的網路路徑。基於主目錄值而設定。使用者主目錄是

在“本地使用者和組”中指定的。

  • %LOGONSERVER% 本地 返回驗證當前登入會話的域控制器的名稱。
  • %NUMBER_OF_PROCESSORS% 系統 指定安裝在計算機上的處理器的數目。
  • %OS% 系統 返回作業系統名稱。Windows 2000 顯示其作業系統為 Windows_NT。
  • %PATH% 系統 指定可執行檔案的搜尋路徑。
  • %PATHEXT% 系統 返回作業系統認為可執行的副檔名的列表。
  • %PROCESSOR_ARCHITECTURE% 系統 返回處理器的晶片體系結構。值:x86 或 IA64 基於
    Itanium
  • %PROCESSOR_IDENTFIER% 系統 返回處理器說明。
  • %PROCESSOR_LEVEL% 系統 返回計算機上安裝的處理器的型號。
  • %PROCESSOR_REVISION% 系統 返回處理器的版本號。
  • %PROMPT% 本地 返回當前解釋程式的命令提示符設定。由 Cmd.exe 生成。
  • %RANDOM% 系統 返回 0 到 32767 之間的任意十進位制數字。由 Cmd.exe 生成。
  • %SYSTEMDRIVE% 系統 返回包含 Windows server operating system 根目錄(即系統根目錄)
    NOTE : echo %WINDIR% 這樣就能顯示一個變數的值
  • 二、自定義變數

    故名思意,自定義變數就是由我們來給他賦予值的變數

    要使用自定義變數就得使用set命令了,看例子.

    @echo off
    set var=我是值
    echo %var%
    pause

    儲存為BAT執行,我們會看到CMD裡返回一個 “我是值”

    var為變數名,=號右變的是要給變數的值
    這就是最簡單的一種設定變數的方法了

    如果我們想讓使用者手工輸入變數的值,而不是在程式碼裡指定,可以用用set命令的/p引數

    例子:

    @echo off
    set /p var=請輸入變數的值
    echo %var%
    pause

    var變數名 =號右邊的是提示語,不是變數的值
    變數的值由我們執行後自己用鍵盤輸入!

    第五章 set命令詳解

    簡單的介紹了一下SET設定自定義變數的作用,現在我來具體講一下set的其他功能.

    一、用set命令設定自定義變數

    前面已有部分應用, 這裡就不加贅述了

    set /p 是命令語法 var是變數名 =號右邊的”請輸入變數的值: “,這個是提示語,不是變數的值了!
    執行後,我們在提示語後面直接輸入1,就會顯示一行您輸入了 1 ~_~

    好了,先回顧到這,現在講SET其他功能

    使用set /?檢視SET的幫助我們發現SET除了我上面講的

    SET [variable=[string]]
    SET /P variable=[promptString]
    //這兩種語法外,還有如下幾種語法:
    SET /A expression
    //環境變數替換已如下增強:
    %PATH:str1=str2%
    %PATH:~10,5%
    %PATH:~-10%
    %PATH:~0,-2%

    這機種語法有什麼用處呢?下面我們來一個個講解他們!

    二、用set命令進行簡單計算

    語法:SET /A expression
    /A 命令列開關指定等號右邊的字串為被評估的數字表達式。該表示式
    評估器很簡單並以遞減的優先權順序支援下列操作:
    () -分組
    ! ~ - -一元運算子
    * / % -算數運算子
    + - -算數運算子
    << >> -二進位制邏輯移位
    & -二進位制按位“與”
    ^ -二進位制按位“異”
    | -二進位制按位“或”
    = *= /= %= += -= -算數賦值
    &= ^= |= <<= >>= -二進位制運算賦值
    , -表示式分隔符

      @echo off
      set /p input=請輸入計算表示式:
      set /a var=%input%
      echo 計算結果:%input%=%var%
      pause

    三、用set命令進行字串處理

    1、字串替換

    好了,符號說到這,現在說%PATH:str1=str2%
    上面語法的意思就是:將字串變數%PATH%中的str1替換為str2
    這個是替換變數值的內容,看例子

    @echo off
    set a= bbs. verybat. cn
    echo 替換前的值: "%a%"
    set var=%a: =%
    echo 替換後的值: "%var%"
    pause

    請注意:字串的替換和擷取功能在引用變數的地方均可以,並不一定必須要有set命令 例: @echo off set
    a=bbs.verybat.cn echo 替換前的值: “%a%” echo 替換後的值: “%a:.=傷腦筋%” pause
    此例在echo語句中就替換了字串,效果一樣。

    2、字串擷取

    a=bbs.verybat.cn
    %a:~1,2% =“bs” 偏移量1,從第二位開始向右取2位
    %a:~-3% =“.cn” 偏移量負3,即倒數3位(也可理解為留下右邊3位),右取全部
    %a:~3% =“.verybat.cn” 偏移量3(也可理解為去掉左邊3位),右取全部
    %a:~0,-3% =“bbs.verybat” 偏移量0,右取長度至負3,即倒數3位
    %a:~2,-3% =“s.verybat” 偏移量2,右取長度至負3,即倒數3位

    所以,擷取功能統一語法格式為: %a:~[m[,n]]%

    方括號表示可選,%a%為變數名,不可少,冒號用於分隔變數名和說明部分,符號~可以簡單理解為“偏移”即可,m為偏移量(預設為0),n為擷取長度(預設為全部)
    上面所述用法其實相當於vbs函式mid、left、right
    %a:~0,n% 相當於函式left(a,n) 取左邊n位
    %a:~-m% 相當於函式right(a,m) 取右邊m位
    %a:~m,n% 相當於函式mid(a,m+1,n) 從m+1位開始取n位
    %a:~m,-n% 相當於函式mid(a,m+1,len(a)-m-n),從m+1位開始,至倒數n+1位
    %a:~m % 相當於函式mid(a,m+1,len(a)-m) 或者right(a,len(a)-m),從m+1位開始取右邊全部。

    思考題目:輸入任意字串,求字串的長度

    @echo off
    set /p str=請輸入任意長度的字串:
    echo 你輸入了字串:"%str%"
    call :stringlenth "%str%" num
    echo 字串長度為:%num%
    pause
    exit
    :StringLenth.bat
    ::---------字串長度計運算元程式
    ::---------引數%1為字串(如有空格,請用引號括起來)
    ::---------引數%2為返回變數名稱,不能含空格或特殊字元
    ::@echo off
    set theString=%~1
    if not defined theString goto :eof
    set Return=0
    :StringLenth_continue
    set /a Return+=1
    set thestring=%thestring:~0,-1%
    if defined thestring goto StringLenth_continue
    if not "%2"=="" set %2=%Return%
    goto :eof

    後記

    結束了變數和set命令的講解, 一般這些內容已經能滿足日常的需要了, 在後面, 我們將介紹DOS高階程式設計的一些基本例子並熟悉DOS