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