標籤:io ar 使用 sp 檔案 on 代碼 amp bs
-
C語言中有各種處理字串的函數,BAT中沒有C語言那麼強大,所以只能結合SET語句,做一些簡單的字串處理
首先看SET 命令的格式如下:
環境變數替換已如下增強:、
%PATH:str1=str2%
會擴充PATH 環境變數,用"str2" 代替擴充結果中的每個"str1"。
要有效地從擴充結果中刪除所有的"str1","str2" 可以是空的。
"str1" 可以以星號打頭;在這種情況下,"str1" 會從擴充結果的
開始到str1 剩餘部分第一次出現的地方,都一直保持相配。
也可以為副檔名指定子字串。
%PATH:~10,5%
會擴充PATH 環境變數,然後只使用在擴充結果中從第11 個(偏
移量10)字元開始的五個字元。如果沒有指定長度,則採用預設
值,即變數數值的餘數。如果兩個數字(位移量和長度)都是負數,
使用的數字則是環境變數數值長度加上指定的位移量或長度。
%PATH:~-10%
會提取PATH 變數的最後十個字元。
%PATH:~0,-2%
會提取PATH 變數的所有字元,除了最後兩個。
具體格式可以在命令列下輸入set /?查詢,或set /?>set.txt匯出到txt檔案
其實要處理字串最多的就是結合上面幾種用法來處理,
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中處理字串的方法