批處理 字串操作

2021-08-25 11:55:29 字數 4907 閱讀 3334

批處理有著具有非常強大的字串處理能力,其功能絕不低於c語言裡面的字串函式集。批處理中可實現的字串處理功能有:擷取字串內容、替換字串特定字段、合併字串、擴充字串等功能。下面對這些功能一一進行講解。

擷取字串可以說是字串處理功能中最常用的乙個子功能了,能夠實現擷取字串中的特定位置的乙個或多個字元。舉例說明其基本功能:

@echo off

setlocal enabledelayedexpansion

::coder

by dsw powerd

by ibat

set abc=hello world, this string come from bat

echo 原字串為:%abc%

echo 擷取前5個字元:%abc

:~0,5%

echo 擷取最後5個字元:%abc

:~-5%

echo 擷取第乙個到倒數第6個字元:%abc

:~1,-5%

echo 從第4個字元開始擷取5個字元:%abc

:~3,5%

echo 從倒數第14個字元開始擷取5個字元:%abc

:~-14,5%

echo 當前時間是:%time% 即 %time:~0,2%點%time:~3,2%分%time:~6,2%秒%time:~9,2%釐秒

pause

輸出為:

原字串為:hello world, this string come from bat

擷取前5個字元:hello

擷取最後5個字元:m bat

擷取第乙個到倒數第6個字元:ello world, this string come fro

從第4個字元開始擷取5個字元:lo wo

從倒數第14個字元開始擷取5個字元: come

當前時間是:18:

37:58.75 即 18點37分58秒75釐秒

替換字串,即將某一字串中的特定字元或字串替換為給定的字串。舉例:

@echo off

setlocal enabledelayedexpansion

::coder by dsw powerd by ibat

set aa=偉大的中國!我為你自豪

echo 替換前:%aa%

echo 替換後:%aa:中國=中華人民共和國%

echo aa=%aa%

echo

%aa%

set aa=%aa:中國=中華人民共和國%

echo aa=%aa%

pause

輸出為:

替換前:偉大的中國!我為你自豪

替換後:偉大的中華人民共和國!我為你自豪

aa=偉大的中國!我為你自豪

偉大的中國!我為你自豪

aa=偉大的中華人民共和國!我為你自豪

對於上面的例子有一點說明,對比兩個echo aa = %aa%可以發現,其等價與:aa=%aa% echo aa=%aa%

其實,合併字串就是將兩個字串放在一起就可以了。舉例說明:

@echo off

setlocal enabledelayedexpansion

::coder by dsw powerd by ibat

set aa=偉大的中國!

set bb=我為你自豪

echo

%aa%

%bb%

echo aa=%aa%

echo bb=%bb%

set "aa=%aa%

%bb%"

echo aa=%aa%

pause

輸出為:

偉大的中國!我為你自豪

aa=偉大的中國!

bb=我為你自豪

aa=偉大的中國!我為你自豪

同樣,如果要改變變數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,不過需要說明的是,不是所有的變數都能夠進行擴充的,有兩個條件:

1、該字串代表乙個檔案路徑;

2、變數要用%x來表示,x可取a-z a-z 0-9共62個字元中的任意乙個。

舉例說明:

@echo off

setlocal enabledelayedexpansion

::coder by dsw powerd by ibat

echo 正在執行的這個批處理:

echo 完全路徑:%0

echo 去掉引號:%~0

echo 所在分割槽:%~d0

echo 所處路徑:%~p0

echo 檔名:%~n0

echo 副檔名:%~x0

echo 檔案屬性:%~a0

echo 檔案大小:%~z0

echo %~nxtza0

pause

輸出為:

正在執行的這個批處理:

完全路徑:c:\users\dsw\desktop\test.bat

去掉引號:c:\users\dsw\desktop\test.bat

所在分割槽:c:

所處路徑:\users\dsw\desktop\

檔名:test

副檔名:.bat

檔案屬性:--a------

18:52

檔案大小:295

--a------ 2016/04/25

19:11

99 test.bat

其中的%0是批處理裡面的引數,代表當前執行的批處理的完全路徑。類似的還有%1-%9,分別代表傳遞來的第1-9個引數。例子如下:

@echo off

setlocal enabledelayedexpansion

::coder

by dsw powerd

by ibat

set aa=c

:\windows\ppp\a.dsw

call:deal aaa %aaa% "c c" ddd eee

echo call func exit

pause>nul

exit

:deal

echo %%0=%

0echo %%1=%

1echo %%2=%

2echo %%3=%

3echo %%4=%

4echo %%5=%

5pause

輸出為:

%0=:deal

%1=aaa

%2=c

:\windows\ppp\a.dsw

%3="c c"

%4=ddd

%5=eee

其中,變數aa在之前是不可以擴充的,通過call命令並將aa作為引數傳遞給子函式:deal,將aa變數轉換成了變數%1,即符合%x格式,從而可以進行字串擴充。

至於%x中x取a-z a-z的形式,可以複習一下for語句,for語句裡面的變數就是用%x來表示的,因而可以直接進行擴充。

字串操作結合set使用

@echo off

setlocal enabledelayedexpansion

::coder by dsw powerd by ibat

set a=abcd efgh ijkl

echo 替換前的值為:"%a%"

set var=%a: =%

echo 替換後的值為:"%var%"

set b=bbs.verybat.cn

set var=%b:~1,2%

echo 擷取的字串為:%var%

set var=%a:~3%

echo 擷取的字串為:%var%

set var=%a:~0,-3%

echo 擷取的字串為:%var%

pause

輸出為:

替換前的值為:"abcd efgh ijkl"

替換後的值為:"abcdefghijkl"

擷取的字串為:bs

擷取的字串為:d efgh ijkl

擷取的字串為:abcd efgh i

-表示字串右邊的意思, -3表示從字串右邊為0,向左移動3個位置

DOS批處理命令 字串操作

1 擷取字串 從指定變數中擷取指定位置的字串,並返回。這個處理,並不改變變數的值 語法格式 變數名 開始位置,終了位置 注 正數的時候開始位置是從0開始向右計算,負數的時候從1開始向右計算。跳的個數為指定開始位置的絕對值 具體有以下幾種擷取方式,看例項去理解用法,這個時候,我們假設有乙個變數 var...

批處理字串偏移指標

echo off set str 123456789 echo 第乙個字元為 str 0,1 echo 頭兩個字元為 str 0,2 echo 頭5個字元為 str 0,5 echo 去掉最後乙個字元後的字串為 str 0,1 echo 去掉最後3個字元後的字串為 str 0,3 echo 第4個字...

批處理 delims分割字串

使用delims的目的主要是通過切分字串獲得可編輯的字串以便於進行下一步編輯。delims好比一把西瓜刀,文字資訊就好比西瓜,使用delims這把西瓜刀將文字這個西瓜切分成許多小塊,這樣吃起來就方便了。echo off for f delims a in 易經.txt do echo a pause...