亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > BAT > 正文

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

2020-07-26 20:14:39
字體:
來源:轉載
供稿:網友

下面對這些功能一一進行講解。

  1、截取字符串

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

復制代碼 代碼如下:

  @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

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

復制代碼 代碼如下:

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

  對于上面的例子有一點說明,對比兩個echo aa = %aa%可以發現,如果要修改變量aa的內容的話,就需要將修改結果“%aa:中國=中華人民共和國%”賦值給變量aa。上面的字符串截取也有著同樣的特點。

3、字符串合并

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

復制代碼 代碼如下:

  @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。

4、擴充字符串

  “擴充”這個詞匯來自于微軟自己的翻譯,意思就是對表示文件路徑的字符串進行特殊的處理,具體功能羅列如下:
  =========================================
  ~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
  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來表示的,因而可以直接進行擴充。

下面是其它網友的補充:注意是與c語言做了一些對比

首先說一下,批處理和高級語言不同,沒有字符串處理函數,比如strcat之類的,但是卻可以利用環境變量來實現這些函數的功能。
本文對照C語言中的字符串處理函數,講解在批處理中的實現方法。

首先說一下字符串的存儲,在C語言中,采用字符數組或者字符指針來存儲字符串,而BAT中沒有這些東東,所以要依靠環境變量來存儲。
設置環境變量的語句為set語句,本文不詳細介紹了,參考set /?語句。

1、C語中的strcpy函數,將一個字符串復制到另一個字符型指針或字符數組,覆蓋原來的字符串。

C語言中的調用方法:strcpy(目標字符串,源字符串)

在批處理中的實現方法:

set 目標字符串=%源字符串%

示例:

復制代碼 代碼如下:

@echo off
::關閉屏幕回顯(可選)
set str1=This is old string
::設置str1中存儲的字符串,注意沒有雙引號,這點與C語言等不同!
set str2=This is new string
::設置str2中存儲的字符串
echo 執行字符串拷貝以前:
echo str1=%str1%
echo str2=%str2%
::先輸出一次原有的字符串
set str1=%str2%
::字符串拷貝
echo 執行字符串拷貝以后:
echo str1=%str1%
echo str2=%str2%
::輸出執行完字符串拷貝后的字符串
echo 輸出完畢,按任意鍵退出&&pause>nul&&exit
::輸出信息,當用戶按任意鍵時,結束該批處理。

2、C語中的strcat函數,將一個字符串連接到另一個字符型指針或字符數組的末尾。

C語言中的調用方法:strcat(目標字符串,源字符串)

在批處理中的實現方法:

set 目標字符串=%目標字符串%%源字符串%

示例:

復制代碼 代碼如下:

@echo off
set str1=This is string1
set str2=This is string2
::設置str1和str2中存儲的字符串
echo 連接字符串以前:
echo str1=%str1%
echo str2=%str2%
::先輸出一次原有的字符串
set str1=%str1%%str2%
::字符串連接
echo 連接字符串以后:
echo str1=%str1%
echo str2=%str2%
::輸出執行完字符串連接后的兩個字符串
echo 輸出完畢,按任意鍵退出&&pause>nul&&exit

3、字符串截取,C中沒有這種函數,不過可以通過語句實現,不再介紹,直接說批處理的。

set 目標字符串=%源字符串:~起始值,截取長度%

注意,起始值從0開始!
截取長度是可選的,如果省略逗號和截取長度,將會從起始值一直截取到字符串的結尾。

示例:

復制代碼 代碼如下:

@echo off
set str1=This is string1
::設置str1中存儲的字符串
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%
::輸出執行結果
echo 輸出完畢,按任意鍵退出&&pause>nul&&exit

4、C語中的strlen函數,取得字符串的長度。

C語言中的調用方法:strlen(字符串)

在批處理中的實現方法是利用goto和標簽,形成循環結構,不斷將字符串截短1字符,并用變量記錄截短的次數,直到字符串變成空串。

示例:

復制代碼 代碼如下:

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

5、C語中的strchr函數,在一個字符串中查找一個字符的首次出現位置,找到時返回所在位置,找不到時返回0值。

批處理中的思路:不斷截短字符串,并取截短后字符串中的首字符,和要求的字符比較,如果相同就利用goto語句跳出循環,輸出結果,如果沒有相同的字符,執行到最后就輸出0值。

示例:

復制代碼 代碼如下:

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

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

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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美精品久久久久久久久| 日韩欧美福利视频| 欧美国产视频一区二区| 国产精品视频在线观看| 欧美激情一级精品国产| 亚洲国产精品成人av| 欧美激情综合色| 在线视频一区二区| 精品亚洲一区二区三区在线播放| 欧美一二三视频| 精品自拍视频在线观看| 久久久久久久91| 国产日韩欧美自拍| 性欧美激情精品| 亚洲国产精品中文| 欧美日韩国产一区在线| 日韩精品视频免费| 国产综合久久久久久| 欧美性猛交xxxx免费看漫画| 一区二区三区亚洲| 亚洲福利精品在线| 日本韩国在线不卡| 国产精品日本精品| 国产在线98福利播放视频| 91日本视频在线| 亚洲最大成人网色| 国产精品户外野外| 宅男66日本亚洲欧美视频| 欧美另类69精品久久久久9999| 91日本在线视频| 欧美激情xxxx| 亚洲一区二区自拍| 成人在线播放av| 国产在线视频2019最新视频| 9.1国产丝袜在线观看| 2019中文在线观看| 国产精品扒开腿做爽爽爽男男| 亚洲国产日韩一区| 久久久噜噜噜久久| 日韩欧美一区二区在线| 奇米4444一区二区三区| 高清一区二区三区日本久| 欧美精品少妇videofree| 91欧美精品午夜性色福利在线| 欧美精品免费在线观看| 亚洲精品国产精品自产a区红杏吧| 欧美性猛交视频| 久久久久中文字幕2018| 国产精品老牛影院在线观看| 日韩在线观看免费| 日韩av中文在线| 欧美国产第一页| 美乳少妇欧美精品| 国产精品igao视频| 国产日韩欧美在线| 伊人久久五月天| 欧美国产日产韩国视频| 亚洲第一视频网站| 久久久www成人免费精品| 亚洲一级黄色片| 国产精品2018| 成人综合国产精品| 91精品在线观看视频| 亚洲美女www午夜| 欧洲亚洲在线视频| 91视频免费在线| 日韩在线视频免费观看| 亚洲欧美激情另类校园| 欧美猛男性生活免费| 91色视频在线观看| 日韩电影中文字幕| 一区二区av在线| 欧美高跟鞋交xxxxxhd| 欧美资源在线观看| 亚洲韩国日本中文字幕| 欧美电影免费观看高清| 欧美电影院免费观看| 亚洲自拍偷拍在线| 成人一区二区电影| 国产精品视频内| 欧美午夜精品久久久久久人妖| 国产一区二区欧美日韩| 国内精品中文字幕| 狠狠久久五月精品中文字幕| 亚洲精品一区二区三区不| 欧美在线免费观看| 久久影视电视剧免费网站清宫辞电视| 亚洲美女av网站| 欧美一区二区视频97| 91视频8mav| 国产精品中文字幕在线| 亚洲激情在线观看视频免费| 国产视频在线一区二区| 久久噜噜噜精品国产亚洲综合| 日韩免费电影在线观看| 亚洲人a成www在线影院| 国产亚洲视频在线| 国产精品视频精品| 欧美成aaa人片在线观看蜜臀| 成人黄色免费在线观看| 国产91在线播放精品91| 亚洲一区二区三区xxx视频| 91免费在线视频网站| 91精品久久久久久久久久久| 欧美成人午夜剧场免费观看| 隔壁老王国产在线精品| 久久久久久久久综合| 精品美女永久免费视频| 两个人的视频www国产精品| 久久久久久久久国产精品| 欧美xxxx做受欧美| 国产999在线| 亚洲精品综合精品自拍| 国产日韩欧美黄色| 色99之美女主播在线视频| 精品欧美国产一区二区三区| 国产精品偷伦视频免费观看国产| 91久久精品国产91性色| 欧日韩不卡在线视频| 欲色天天网综合久久| 欧美电影在线观看网站| 国产精品视频成人| 国产精品亚洲激情| 久久久久久久久久久亚洲| 亚洲视频日韩精品| 日韩欧美亚洲范冰冰与中字| xxx欧美精品| 57pao成人国产永久免费| 色yeye香蕉凹凸一区二区av| 久久91亚洲人成电影网站| 久久久久www| 庆余年2免费日韩剧观看大牛| 亚洲高清福利视频| 欧美精品久久久久久久免费观看| 亚洲片国产一区一级在线观看| 亚洲国产精品va在线看黑人| 91麻豆国产语对白在线观看| 91精品久久久久久久久久久| 成人免费网站在线看| 久久免费视频在线| 奇米4444一区二区三区| 亚洲最新视频在线| 久久免费少妇高潮久久精品99| 亚洲剧情一区二区| 成人在线小视频| 在线看日韩欧美| 亚洲精品v欧美精品v日韩精品| 国产精品精品视频| 日韩精品一区二区视频| 88国产精品欧美一区二区三区| www.欧美三级电影.com| 国产精品美女www爽爽爽视频| 狠狠色狠狠色综合日日五| 九九热精品在线| 国产精品入口福利| 精品在线欧美视频| 中文字幕欧美日韩精品| 久久精品成人一区二区三区| 亚洲情综合五月天| 久久人人爽人人爽人人片av高清| 国产精品白嫩初高中害羞小美女| 国内精品视频在线| 国产91精品不卡视频| 日韩av网站导航|