主頁(yè) > 知識(shí)庫(kù) > BAT批處理中的字符串處理詳解(字符串截取)

BAT批處理中的字符串處理詳解(字符串截取)

熱門標(biāo)簽:電話機(jī)器人全國(guó)招商 電話機(jī)器人產(chǎn)品怎么樣 玉林市機(jī)器人外呼系統(tǒng)哪家好 雷霆電銷機(jī)器人怎么樣 智能打電話機(jī)器人收費(fèi) 清遠(yuǎn)百度地圖標(biāo)注店鋪位置 如何申請(qǐng)400電話業(yè)務(wù)mm 呼倫貝爾外呼系統(tǒng) 如何弄地圖標(biāo)注

下面對(duì)這些功能一一進(jìn)行講解。

  1、截取字符串

  截取字符串可以說(shuō)是字符串處理功能中最常用的一個(gè)子功能了,能夠?qū)崿F(xiàn)截取字符串中的特定位置的一個(gè)或多個(gè)字符。舉例說(shuō)明其基本功能:

復(fù)制代碼 代碼如下:

  @echo off
  set ifo=abcdefghijklmnopqrstuvwxyz0123456789
  echo 原字符串(第二行為各字符的序號(hào)):
  echo %ifo%
  echo 123456789012345678901234567890123456
  echo 截取前5個(gè)字符:
  echo %ifo:~0,5%
  echo 截取最后5個(gè)字符:
  echo %ifo:~-5%
  echo 截取第一個(gè)到倒數(shù)第6個(gè)字符:
  echo %ifo:~0,-5%
  echo 從第4個(gè)字符開(kāi)始,截取5個(gè)字符:
  echo %ifo:~3,5%
  echo 從倒數(shù)第14個(gè)字符開(kāi)始,截取5個(gè)字符:
  echo %ifo:~-14,5%
  pause

  當(dāng)然,上面的例子只是將字符串處理的基本功能展示出來(lái)了,還看不出字符串處理具體有什么用處。下面這個(gè)例子是對(duì)時(shí)間進(jìn)行處理。

復(fù)制代碼 代碼如下:

  @echo off
  echo 當(dāng)前時(shí)間是:%time% 即 %time:~0,2%點(diǎn)%time:~3,2%分%time:~6,2%秒%time:~9,2%厘秒
  pause

2、替換字符串
  替換字符串,即將某一字符串中的特定字符或字符串替換為給定的字符串。舉例說(shuō)明其功能:

復(fù)制代碼 代碼如下:

  @echo off
  set aa=偉大的中國(guó)!我為你自豪!
  echo 替換前:%aa%
  echo 替換后:%aa:中國(guó)=中華人民共和國(guó)%
  echo aa = %aa%
  set "aa=%aa:中國(guó)=中華人民共和國(guó)%"
  echo aa = %aa%
  pause

  對(duì)于上面的例子有一點(diǎn)說(shuō)明,對(duì)比兩個(gè)echo aa = %aa%可以發(fā)現(xiàn),如果要修改變量aa的內(nèi)容的話,就需要將修改結(jié)果“%aa:中國(guó)=中華人民共和國(guó)%”賦值給變量aa。上面的字符串截取也有著同樣的特點(diǎn)。

3、字符串合并

  其實(shí),合并字符串就是將兩個(gè)字符串放在一起就可以了。舉例說(shuō)明:

復(fù)制代碼 代碼如下:

  @echo off
  set aa=偉大的中國(guó)!
  set bb=我為你自豪!
  echo %aa%%bb%
  echo aa=%aa%
  echo bb=%bb%
  set "aa=%aa%%bb%"
  echo aa=%aa%
  pause

  同樣,如果要改變變量aa的內(nèi)容的話,就需要將合并結(jié)果“%aa%%bb%”賦值給變量aa。

4、擴(kuò)充字符串

  “擴(kuò)充”這個(gè)詞匯來(lái)自于微軟自己的翻譯,意思就是對(duì)表示文件路徑的字符串進(jìn)行特殊的處理,具體功能羅列如下:
  =========================================
  ~I - 刪除任何引號(hào)("),擴(kuò)充 %I
  %~fI - 將 %I 擴(kuò)充到一個(gè)完全合格的路徑名
  %~dI - 僅將 %I 擴(kuò)充到一個(gè)驅(qū)動(dòng)器號(hào)
  %~pI - 僅將 %I 擴(kuò)充到一個(gè)路徑
  %~nI - 僅將 %I 擴(kuò)充到一個(gè)文件名
  %~xI - 僅將 %I 擴(kuò)充到一個(gè)文件擴(kuò)展名
  %~sI - 擴(kuò)充的路徑只含有短名
  %~aI - 將 %I 擴(kuò)充到文件的文件屬性
  %~tI - 將 %I 擴(kuò)充到文件的日期/時(shí)間
  %~zI - 將 %I 擴(kuò)充到文件的大小
  %~$PATH:I - 查找列在路徑環(huán)境變量的目錄,并將 %I 擴(kuò)充
  到找到的第一個(gè)完全合格的名稱。如果環(huán)境變量名
  未被定義,或者沒(méi)有找到文件,此組合鍵會(huì)擴(kuò)充到
  空字符串
  可以組合修飾符來(lái)得到多重結(jié)果:
  %~dpI - 僅將 %I 擴(kuò)充到一個(gè)驅(qū)動(dòng)器號(hào)和路徑
  %~nxI - 僅將 %I 擴(kuò)充到一個(gè)文件名和擴(kuò)展名
  %~fsI - 僅將 %I 擴(kuò)充到一個(gè)帶有短名的完整路徑名
  %~dp$PATH:i - 查找列在路徑環(huán)境變量的目錄,并將 %I 擴(kuò)充
  到找到的第一個(gè)驅(qū)動(dòng)器號(hào)和路徑。
  %~ftzaI - 將 %I 擴(kuò)充到類似輸出線路的 DIR
  =========================================
  以上內(nèi)容引用于for /?幫助信息。其中的I代表變量I,不過(guò)需要說(shuō)明的是,不是所有的變量都能夠進(jìn)行擴(kuò)充的,有兩個(gè)條件:1、該字符串代表一個(gè)文件路徑;2、變量要用%x來(lái)表示,x可取a-z A-Z 0-9共62個(gè)字符中的任意一個(gè)。舉例說(shuō)明:

復(fù)制代碼 代碼如下:

  @echo off
  echo 正在運(yùn)行的這個(gè)批處理:
  echo 完全路徑:%0
  echo 去掉引號(hào):%~0
  echo 所在分區(qū):%~d0
  echo 所處路徑:%~p0
  echo 文件名:%~n0
  echo 擴(kuò)展名:%~x0
  echo 文件屬性:%~a0
  echo 修改時(shí)間:%~t0
  echo 文件大?。?~z0
  pause

  其中的%0是批處理里面的參數(shù),代表當(dāng)前運(yùn)行的批處理的完全路徑。類似的還有%1-%9,分別代表傳遞來(lái)的第1-9個(gè)參數(shù)。例子如下:

復(fù)制代碼 代碼如下:

  @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在之前是不可以擴(kuò)充的,通過(guò)call命令并將aa作為參數(shù)傳遞給子函數(shù):deal,將aa變量轉(zhuǎn)換成了變量%1,即符合%x格式,從而可以進(jìn)行字符串?dāng)U充。
  至于%x中x取a-z A-Z的形式,可以復(fù)習(xí)一下for語(yǔ)句,for語(yǔ)句里面的變量就是用%x來(lái)表示的,因而可以直接進(jìn)行擴(kuò)充。

下面是其它網(wǎng)友的補(bǔ)充:注意是與c語(yǔ)言做了一些對(duì)比

首先說(shuō)一下,批處理和高級(jí)語(yǔ)言不同,沒(méi)有字符串處理函數(shù),比如strcat之類的,但是卻可以利用環(huán)境變量來(lái)實(shí)現(xiàn)這些函數(shù)的功能。
本文對(duì)照C語(yǔ)言中的字符串處理函數(shù),講解在批處理中的實(shí)現(xiàn)方法。

首先說(shuō)一下字符串的存儲(chǔ),在C語(yǔ)言中,采用字符數(shù)組或者字符指針來(lái)存儲(chǔ)字符串,而B(niǎo)AT中沒(méi)有這些東東,所以要依靠環(huán)境變量來(lái)存儲(chǔ)。
設(shè)置環(huán)境變量的語(yǔ)句為set語(yǔ)句,本文不詳細(xì)介紹了,參考set /?語(yǔ)句。

1、C語(yǔ)中的strcpy函數(shù),將一個(gè)字符串復(fù)制到另一個(gè)字符型指針或字符數(shù)組,覆蓋原來(lái)的字符串。

C語(yǔ)言中的調(diào)用方法:strcpy(目標(biāo)字符串,源字符串)

在批處理中的實(shí)現(xiàn)方法:

set 目標(biāo)字符串=%源字符串%

示例:

復(fù)制代碼 代碼如下:

@echo off
::關(guān)閉屏幕回顯(可選)
set str1=This is old string
::設(shè)置str1中存儲(chǔ)的字符串,注意沒(méi)有雙引號(hào),這點(diǎn)與C語(yǔ)言等不同!
set str2=This is new string
::設(shè)置str2中存儲(chǔ)的字符串
echo 執(zhí)行字符串拷貝以前:
echo str1=%str1%
echo str2=%str2%
::先輸出一次原有的字符串
set str1=%str2%
::字符串拷貝
echo 執(zhí)行字符串拷貝以后:
echo str1=%str1%
echo str2=%str2%
::輸出執(zhí)行完字符串拷貝后的字符串
echo 輸出完畢,按任意鍵退出pause>nulexit
::輸出信息,當(dāng)用戶按任意鍵時(shí),結(jié)束該批處理。

2、C語(yǔ)中的strcat函數(shù),將一個(gè)字符串連接到另一個(gè)字符型指針或字符數(shù)組的末尾。

C語(yǔ)言中的調(diào)用方法:strcat(目標(biāo)字符串,源字符串)

在批處理中的實(shí)現(xiàn)方法:

set 目標(biāo)字符串=%目標(biāo)字符串%%源字符串%

示例:

復(fù)制代碼 代碼如下:

@echo off
set str1=This is string1
set str2=This is string2
::設(shè)置str1和str2中存儲(chǔ)的字符串
echo 連接字符串以前:
echo str1=%str1%
echo str2=%str2%
::先輸出一次原有的字符串
set str1=%str1%%str2%
::字符串連接
echo 連接字符串以后:
echo str1=%str1%
echo str2=%str2%
::輸出執(zhí)行完字符串連接后的兩個(gè)字符串
echo 輸出完畢,按任意鍵退出pause>nulexit

3、字符串截取,C中沒(méi)有這種函數(shù),不過(guò)可以通過(guò)語(yǔ)句實(shí)現(xiàn),不再介紹,直接說(shuō)批處理的。

set 目標(biāo)字符串=%源字符串:~起始值,截取長(zhǎng)度%

注意,起始值從0開(kāi)始!
截取長(zhǎng)度是可選的,如果省略逗號(hào)和截取長(zhǎng)度,將會(huì)從起始值一直截取到字符串的結(jié)尾。

示例:

復(fù)制代碼 代碼如下:

@echo off
set str1=This is string1
::設(shè)置str1中存儲(chǔ)的字符串
set str2=%str1:~8,6%
set str3=%str1:~0,4%
set str4=%str1:~5%
::字符串截取
echo 原字符串:
echo str1=%str1%
echo 截取得到的字符串:
echo str2=%str2%
echo str3=%str3%
echo str4=%str4%
::輸出執(zhí)行結(jié)果
echo 輸出完畢,按任意鍵退出pause>nulexit

4、C語(yǔ)中的strlen函數(shù),取得字符串的長(zhǎng)度。

C語(yǔ)言中的調(diào)用方法:strlen(字符串)

在批處理中的實(shí)現(xiàn)方法是利用goto和標(biāo)簽,形成循環(huán)結(jié)構(gòu),不斷將字符串截短1字符,并用變量記錄截短的次數(shù),直到字符串變成空串。

示例:

復(fù)制代碼 代碼如下:

@echo off
set str1=This is a test string
set str2=Hello World
::設(shè)置兩個(gè)字符串
set str=%str1%
::將str1復(fù)制到str
:next1
::標(biāo)簽,用于goto跳轉(zhuǎn)
::注意與注釋語(yǔ)句的區(qū)別,注釋用兩個(gè)冒號(hào)開(kāi)頭,標(biāo)簽則為一個(gè)冒號(hào)
if not "%str%"=="" (
::判斷str是不是空串,如果不是則執(zhí)行下邊的語(yǔ)句
set /a num+=1
::算術(shù)運(yùn)算,使num的值自增1,相當(dāng)于num++或者++num語(yǔ)句
set "str=%str:~1%"
::截取字符串,賦給自身
goto next1
::跳轉(zhuǎn)到next1標(biāo)簽
::這里利用goto和標(biāo)簽,構(gòu)成循環(huán)結(jié)構(gòu)
)
::當(dāng)以上循環(huán)結(jié)構(gòu)執(zhí)行完畢時(shí),會(huì)執(zhí)行下邊的語(yǔ)句
echo str1=%str1%
echo str1的長(zhǎng)度為:%num%
::輸出結(jié)果
set num=0
::將記和用的環(huán)境變量num置0,以便開(kāi)始下一次運(yùn)算。
set str=%str2%
::將str2復(fù)制到str
:next2
::定義一個(gè)新的標(biāo)簽
::注意不能與已有的標(biāo)簽同名,否則會(huì)出錯(cuò)!
if not "%str%"=="" (
set /a num+=1
set "str=%str:~1%"
goto next2
)
::和上一個(gè)循環(huán)相似,不再介紹
echo str2=%str2%
echo str2的長(zhǎng)度為:%num%
::輸出結(jié)果
echo 輸出完畢,按任意鍵退出pause>nulexit

5、C語(yǔ)中的strchr函數(shù),在一個(gè)字符串中查找一個(gè)字符的首次出現(xiàn)位置,找到時(shí)返回所在位置,找不到時(shí)返回0值。

批處理中的思路:不斷截短字符串,并取截短后字符串中的首字符,和要求的字符比較,如果相同就利用goto語(yǔ)句跳出循環(huán),輸出結(jié)果,如果沒(méi)有相同的字符,執(zhí)行到最后就輸出0值。

示例:

復(fù)制代碼 代碼如下:

@echo off
Setlocal ENABLEDELAYEDEXPANSION
::啟用命令擴(kuò)展,參加setlocal /?命令
set str1=This is a test string
set ch1=t
::注意,這里是區(qū)分大小寫(xiě)的!
set str=%str1%
::復(fù)制字符串,用來(lái)截短,而不影響源字符串
:next
if not "%str%"=="" (
set /a num+=1
if "!str:~0,1!"=="%ch1%" goto last
::比較首字符是否為要求的字符,如果是則跳出循環(huán)
set "str=%str:~1%"
goto next
)
set /a num=0
::沒(méi)有找到字符時(shí),將num置零
:last
echo 字符'%ch1%'在字符串"%str1%"中的首次出現(xiàn)位置為%num%
echo 輸出完畢,按任意鍵退出pause>nulexit

引用:
最后出幾道題,看看大家學(xué)習(xí)的怎么樣!
(1)如何實(shí)現(xiàn)C語(yǔ)言中strstr函數(shù)的功能?
提示:strstr函數(shù)的功能是在字符串1中查找字符串2,找到時(shí)返回串2首次出現(xiàn)的位置,否則返回0值。與strchr區(qū)別就是,第二個(gè)參數(shù)是字符串,而不是字符了。

(2)如何用批處理構(gòu)建while循環(huán)?
提示:while循環(huán)一般格式為:
while(表達(dá)式)
{
循環(huán)體
[break|continue;]
循環(huán)體
}
其中,循環(huán)體為0條或多條語(yǔ)句,break用于跳出循環(huán),continue用于直接判斷表達(dá)式并決定是否進(jìn)入下一次循環(huán)。
一般執(zhí)行順序:首先判斷表達(dá)式,如果成立則進(jìn)入循環(huán),循環(huán)體執(zhí)行完畢后再次判斷表達(dá)式的值,決定是否再次循環(huán)。

(3)如何用批處理構(gòu)建do-while循環(huán)?
提示:do-while循環(huán)一般格式為:
do
{
循環(huán)體
[break|continue;]
循環(huán)體
}while(表達(dá)式);
各個(gè)語(yǔ)句的解釋參照while循環(huán)。
一般執(zhí)行順序:首先進(jìn)入循環(huán),循環(huán)體執(zhí)行完畢后判斷表達(dá)式的值,表達(dá)式成立則再次進(jìn)入循環(huán)。

您可能感興趣的文章:
  • 批處理經(jīng)典入門教程!(從不懂到高手)
  • windows批處理命令教程
  • bat批處理 if 命令示例詳解
  • 批處理 Set 命令詳解 讓你理解set命令
  • 批處理命令Start的使用介紹
  • 批處理bat設(shè)置固定IP地址和自動(dòng)IP地址
  • Windows下用命令行修改IP地址的方法詳解(附批處理文件)
  • 批處理獲取網(wǎng)卡名稱的代碼(附修改IP、網(wǎng)關(guān)、DNS腳本)
  • 獲取外網(wǎng)IP地址的批處理代碼
  • 批處理、VBS實(shí)現(xiàn)自動(dòng)設(shè)置IP、默認(rèn)網(wǎng)關(guān)、DNS、WINS、IE代理(全)
  • IP地址自動(dòng)設(shè)置的批處理代碼分享

標(biāo)簽:白銀 蕪湖 江西 樂(lè)山 三門峽 公主嶺 株洲 臺(tái)州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《BAT批處理中的字符串處理詳解(字符串截取)》,本文關(guān)鍵詞  BAT,批處理,中的,字符串,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《BAT批處理中的字符串處理詳解(字符串截取)》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于BAT批處理中的字符串處理詳解(字符串截取)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章