首先說一下,批處理和高階語言不同,沒有字串處理函式,比如strcat之類的,但是卻可以利用環境變數來實現這些函式的功能。
本文對照c語言中的字串處理函式,講解在批處理中的實現方法。
首先說一下字串的儲存,在c語言中,採用字元陣列或者字元指標來儲存字串,而bat中沒有這些東東,所以要依靠環境變數來儲存。
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
BAT指令碼的字串處理
在cmd中,一般輸入中文會出現亂碼,因為cmd對中文的編碼格式為ansi編碼,所以如果想讓bat指令碼顯示中文,便需將其編碼格式轉為ansi。如下圖 將其編碼格式改為ansi以後 echo 原字串為 abc echo 擷取前5個字元 abc 0,5 echo 擷取最後5個字元 abc 5 echo ...
bat 批處理 字串 擷取
由於專案中配置項太多,經常有同事在配置xml的時候,講 配置的路徑搞錯,先需要搞乙個指令碼,可以自動將路徑擷取出來,晚上收集了點資料,暫時先上幾個 bat 後面留著 具體實現。echo off setvar 0 rem 迴圈開始了 continue set a var 1 echo 第 var 次迴...
bat批處理字串擷取補充
先複製貼上一段網上很容易就搜到的內容 echo off set ifo abcdefghijklmnopqrstuvwxyz0123456789 echo 原字串 第二行為各字元的序號 echo ifo echo 123456789012345678901234567890123456 echo 擷...