批處理中的字串處理詳解

2021-06-04 20:32:02 字數 4165 閱讀 7761

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

引用:

最後出幾道題,看看大家學習的怎麼樣!

(1)如何實現c語言中strstr函式的功能?

(2)如何用批處理構建while迴圈?

while(表示式)

其中,迴圈體為0條或多條語句,break用於跳出迴圈,continue用於直接判斷表示式並決定是否進入下一次迴圈。

一般執行順序:首先判斷表示式,如果成立則進入迴圈,迴圈體執行完畢後再次判斷表示式的值,決定是否再次迴圈。

(3)如何用批處理構建do-while迴圈?

dowhile(表示式);

各個語句的解釋參照while迴圈。

一般執行順序:首先進入迴圈,迴圈體執行完畢後判斷表示式的值,表示式成立則再次進入迴圈。

批處理中的字串處理詳解

來自 http hi.baidu.com microalex blog item 4e7df9f48be7bdddf2d385d5.html 首先說一下,批處理和高階語言不同,沒有字串處理函式,比如strcat之類的,但是卻可以利用環境變數來實現這些函式的功能。本文對照c語言中的字串處理函式,講解在...

批處理中的字串處理詳解

批處理中的字串處理詳解 首先說一下,批處理和高階語言不同,沒有字串處理函式,比如strcat之類的,但是卻可以利用環境變數來實現這些函式的功能。本文對照c語言中的字串處理函式,講解在批處理中的實現方法。首先說一下字串的儲存,在c語言中,採用字元陣列或者字元指標來儲存字串,而bat中沒有這些東東,所以...

批處理 字串操作

批處理有著具有非常強大的字串處理能力,其功能絕不低於c語言裡面的字串函式集。批處理中可實現的字串處理功能有 擷取字串內容 替換字串特定字段 合併字串 擴充字串等功能。下面對這些功能一一進行講解。擷取字串可以說是字串處理功能中最常用的乙個子功能了,能夠實現擷取字串中的特定位置的乙個或多個字元。舉例說明...