批處理中的字串處理詳解
首先說一下,批處理和高階語言不同,沒有字串處理函式,比如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
::輸出資訊,當使用者按任意鍵時,結束該批處理。效果圖:
截圖00145.png (8.8 kb)
2008-3-25 14:21
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效果圖:
截圖00146.png (8.69 kb)
2008-3-25 14:21
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效果圖:
截圖00147.png (8.19 kb)
2008-3-25 14:21
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效果圖:
截圖00148.png (7.87 kb)
2008-3-25 14:21
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效果圖:
截圖00160.png (7.59 kb)
2008-3-25 14:21引用:
最後出幾道題,看看大家學習的怎麼樣!
(1)如何實現c語言中strstr函式的功能?
(2)如何用批處理構建while迴圈?
while(表示式)
迴圈體[break|continue;]
迴圈體其中,迴圈體為0條或多條語句,break用於跳出迴圈,continue用於直接判斷表示式並決定是否進入下一次迴圈。
一般執行順序:首先判斷表示式,如果成立則進入迴圈,迴圈體執行完畢後再次判斷表示式的值,決定是否再次迴圈。
(3)如何用批處理構建do-while迴圈?
do迴圈體
[break|continue;]
迴圈體}while(表示式);
各個語句的解釋參照while迴圈。
一般執行順序:首先進入迴圈,迴圈體執行完畢後判斷表示式的值,表示式成立則再次進入迴圈。
批處理中的字串處理詳解
來自 http hi.baidu.com microalex blog item 4e7df9f48be7bdddf2d385d5.html 首先說一下,批處理和高階語言不同,沒有字串處理函式,比如strcat之類的,但是卻可以利用環境變數來實現這些函式的功能。本文對照c語言中的字串處理函式,講解在...
批處理中的字串處理詳解
首先說一下,批處理和高階語言不同,沒有字串處理函式,比如strcat之類的,但是卻可以利用環境變數來實現這些函式的功能。本文對照c語言中的字串處理函式,講解在批處理中的實現方法。首先說一下字串的儲存,在c語言中,採用字元陣列或者字元指標來儲存字串,而bat中沒有這些東東,所以要依靠環境變數來儲存。1...
批處理 字串操作
批處理有著具有非常強大的字串處理能力,其功能絕不低於c語言裡面的字串函式集。批處理中可實現的字串處理功能有 擷取字串內容 替換字串特定字段 合併字串 擴充字串等功能。下面對這些功能一一進行講解。擷取字串可以說是字串處理功能中最常用的乙個子功能了,能夠實現擷取字串中的特定位置的乙個或多個字元。舉例說明...