批處理有着具備很是強大的字符串處理能力,其功能毫不低於C語言裏面的字符串函數集。批處理中可實現的字符串處理功能有:截取字符串內容、替換字符串特定字段、合併字符串、擴充字符串等功能。下面對這些功能一一進行講解。
【 一、截取字符串 】
截取字符串能夠說是字符串處理功能中最經常使用的一個子功能了,可以實現截取字符串中的特定位置的一個或多個字符。
說明:從指定變量中截取指定位置的字符串,並返回。注意:這個處理,並不改變原變量的值
語法格式:%變量名:~數字一,數字二%
這個字符串截取中,仍是有幾個規律的:
1.數字一爲正數:表示從開始位置是從0開始向右計算,偏移的字符個數。
2.數字一爲負數:表示從開始位置是從0開始向左計算,偏移的字符個數,即字符串從後往前數。
3.數字二爲正數:表示從偏移位置開始截取的字符串的長度個數。
4.數字二爲負數:表示從偏移位置開始截取的字符串,到字符串從後往前數的字符個數的位置結束
具體有如下幾種截取方式,看實例去理解用法,假設有一個變量【var】,其值爲【1234567890】。
①正常路線:%var:~5,2% ⇒ 67html
②無終了:%var:~5% ⇒ 67890函數
③負終了:%var:~5,-2% ⇒ 678翻譯
④負開始位置:%var:~-6,2% ⇒ 56htm
⑤負開始無終了:%var:~-6% ⇒ 567890blog
⑥負開始負終了:%var:~-6,-2% ⇒ 5678字符串
⑦沒有開始:%var:~,4% ⇒ 1234get
⑧無開始負終了:%var:~,-4% ⇒ 123456字符串處理
⑨無開始無終了:%var% ⇒ 1234567890it
正常的狀況下,就這幾種截取的狀況,徹底能夠根據咱們業務的須要,來使用不一樣的方法來截取字符串。class
可是,這個字符串截取根據不一樣的狀況下是否是有異常發生呢?
1.當要截取的字符串不爲空,而且,要截出的字符串不不能正常截出的時候,返回結果就是空值。
2.當要截取的字符串自己就是空的時候,取得結果就是【~開始位置,終了位置】,也就是命令的一部分被返回出來。
再舉例說明其基本功能:
=========================================
@echo off
set ifo=abcdefghijklmnopqrstuvwxyz0123456789
echo 原字符串(第二行爲各字符的序號):
echo %ifo%
echo 123456789012345678901234567890123456
echo 截取前5個字符:
echo %ifo:~0,5%
echo 截取最後5個字符:
echo %ifo:~-5%
echo 截取第一個到倒數第6個字符:
echo %ifo:~0,-5%
echo 從第4個字符開始,截取5個字符:
echo %ifo:~3,5%
echo 從倒數第14個字符開始,截取5個字符:
echo %ifo:~-14,5%
pause
=========================================
固然,上面的例子只是將字符串處理的基本功能展現出來了,還看不出字符串處理具體有什麼用處。下面這個例子是對時間進行處理。
=========================================
@echo off
echo 當前時間是:%time% 即 %time:~0,2%點%time:~3,2%分%time:~6,2%秒%time:~9,2%釐秒
pause
=========================================
【 二、替換字符串 】
替換字符串,即將某一字符串中的特定字符或字符串替換爲給定的字符串。舉例說明其功能:
=========================================
@echo off
set aa=偉大的中國!我爲你自豪!
echo 替換前:%aa%
echo 替換後:%aa:中國=中華人民共和國%
echo aa = %aa%
set "aa=%aa:中國=中華人民共和國%"
echo aa = %aa%
pause
=========================================
對於上面的例子有一點說明,對比兩個echo aa = %aa%能夠發現,若是要修改變量aa的內容的話,就須要將修改結果「%aa:中國=中華人民共和國%」賦值給變量aa。上面的字符串截取也有着一樣的特色。
【 三、字符串合併 】
其實,合併字符串就是將兩個字符串放在一塊兒就能夠了。舉例說明:
=========================================
@echo off
set aa=偉大的中國!
set bb=我爲你自豪!
echo %aa%%bb%
echo aa=%aa%
echo bb=%bb%
set "aa=%aa%%bb%"
echo aa=%aa%
pause
=========================================
一樣,若是要改變變量aa的內容的話,就須要將合併結果「%aa%%bb%」賦值給變量aa。
【 四、擴充字符串 】
「擴充」這個詞彙來自於微軟本身的翻譯,意思就是對錶示文件路徑的字符串進行特殊的處理,具體功能羅列以下:
=========================================
~I - 刪除任何引號("),擴充 %I
%~fI - 將 %I 擴充到一個徹底合格的路徑名
%~dI - 僅將 %I 擴充到一個驅動器號
%~pI - 僅將 %I 擴充到一個路徑
%~nI - 僅將 %I 擴充到一個文件名
%~xI - 僅將 %I 擴充到一個文件擴展名
%~sI - 擴充的路徑只含有短名
%~aI - 將 %I 擴充到文件的文件屬性
%~tI - 將 %I 擴充到文件的日期/時間
%~zI - 將 %I 擴充到文件的大小
%~$PATH:I - 查找列在路徑環境變量的目錄,並將 %I 擴充
到找到的第一個徹底合格的名稱。若是環境變量名
未被定義,或者沒有找到文件,此組合鍵會擴充到
空字符串
能夠組合修飾符來獲得多重結果:
%~dpI - 僅將 %I 擴充到一個驅動器號和路徑
%~nxI - 僅將 %I 擴充到一個文件名和擴展名
%~fsI - 僅將 %I 擴充到一個帶有短名的完整路徑名
%~dp$PATH:i - 查找列在路徑環境變量的目錄,並將 %I 擴充
到找到的第一個驅動器號和路徑。
%~ftzaI - 將 %I 擴充到相似輸出線路的 DIR
=========================================
以上內容引用於for /?幫助信息。其中的I表明變量I,不過須要說明的是,不是全部的變量都可以進行擴充的,有兩個條件:一、該字符串表明一個文件路徑;二、變量要用%x來表示,x可取a-z A-Z 0-9共62個字符中的任意一個。舉例說明:
=========================================
@echo off
echo 正在運行的這個批處理:
echo 徹底路徑:%0
echo 去掉引號:%~0
echo 所在分區:%~d0
echo 所處路徑:%~p0
echo 文件名:%~n0
echo 擴展名:%~x0
echo 文件屬性:%~a0
echo 修改時間:%~t0
echo 文件大小:%~z0
pause
=========================================
其中的%0是批處理裏面的參數,表明當前運行的批處理的徹底路徑。相似的還有%1-%9,分別表明傳遞來的第1-9個參數。例子以下:
===============================================
@echo off
set aa=C:\Windows\PPP\a.btx
call :deal aaa %aa% "c c" ddd eee
pause>nul
exit
:deal
echo %%0 = %0
echo %%1 = %1
echo %%2 = %2
echo %%3 = %3
echo %%4 = %4
echo %%5 = %5
===============================================
其中,變量aa在以前是不能夠擴充的,經過call命令並將aa做爲參數傳遞給子函數:deal,將aa變量轉換成了變量%1,即符合%x格式,從而能夠進行字符串擴充。
至於%x中x取a-z A-Z的形式,能夠複習一下for語句,for語句裏面的變量就是用%x來表示的,於是能夠直接進行擴充。