Bat字串處理函式

2021-05-28 06:22:04 字數 3698 閱讀 5769

首先說一下,批處理和高階語言不同,沒有字串處理函式,比如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 擷...