DOS批處理的字符串功能

  批處理有着具備很是強大的字符串處理能力,其功能毫不低於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來表示的,於是能夠直接進行擴充。
相關文章
相關標籤/搜索