DOS批處理字符串截取
【字符串截取語法格式】
% VAR:~ [ m [ ,n ] ] %
或者
!VAR: ~ [ m [,n ] ] !
- [ ] (方括號(hào))表示可選
- 兩邊的 %(或 ! )為變量取值標(biāo)識(shí)符
- VAR 為變量名(不可缺少)
- 符號(hào) : 用于分隔變量名和說明部分
- 符號(hào) ~ 可以簡單理解為“偏移”
- m 為 %VAR% 或 !VAR]! 中的字符偏移,如果從右向左,則字符的偏移從 0 始計(jì)數(shù),即:其第一個(gè)字符的偏移是0;如果從左向右,則字符的偏移從 -1 開始計(jì)數(shù),即:其最后一個(gè)字符的偏移是 -1),m 的缺省值為0。
- n 為將要截取字符串的長度,n 的缺省值為 0
【語法功能】
從變量值中截取字符(串)
【關(guān)于 m 的取值】
m 的取值可以是取正整數(shù),也可以是負(fù)整數(shù),下面舉例說明:
set "a=abcdefg"
在 %a:~m,n% 中,m的取值范圍如下所示:
- 如果 m 的值大于取值范圍的最大值時(shí),則截取不到任何字符
- 如果 m 的值小于取值范圍的最小值時(shí),則 m 取值為最小值
示例
:: 本示例包含漢字,如執(zhí)行亂碼,請(qǐng)使用 Notepad++ 把本文檔轉(zhuǎn)化成ANSI編碼 【標(biāo)注一】 ::demo.bat @echo off set "a=abcdef" echo 截取前的值: "%a%" :: -7 小于 取值范圍最小值 -6,則m取值-6 set var=%a:~-7,2% echo 截取后的值: "%var%" echo --------------------------------------------------- set "a=abcdef" echo 截取前的值: "%a%" :: 6 大于 取值范圍最大值 5,則截取不到任何字符 set var=%a:~6,2% echo 截取后的值: "%var%"
運(yùn)行
C:\>demo
截取前的值: "abcdef"
截取后的值: "ab"
---------------------------------------------------
截取前的值: "abcdef"
截取后的值: ""
C:\>
【關(guān)于 n 的取值】
n 的取值可以是取正整數(shù),也可以是負(fù)整數(shù),下面舉例說明:
1、在 %a:~m,n% 中,n 為正整數(shù),則在 %a% 中,從偏移是 m 的字符(包括偏移是 m 的字符)開始,截取長度為 n 的所有字符。
C:\>set a=abcdefg C:\>echo %a:~1,3% bcd C:\>
在 %a:~m,n% 中,n 為正整數(shù),如果截取的長度超出 %a% 中的長度,則截取至 %a% 的末尾字符(包括末尾字符)。
示例
:: 本示例包含漢字,如執(zhí)行亂碼,請(qǐng)使用 Notepad++ 把本文檔轉(zhuǎn)化成ANSI編碼 【標(biāo)注一】 ::demo.bat @echo off set "a=abcdef" echo 截取前的值: "%a%" :: 8 超出 %a% 的字符最大偏移(5),則截取到末尾 set var=%a:~1,8% echo 截取后的值: "%var%"
運(yùn)行
C:\>demo
截取前的值: "abcdef"
截取后的值: "bcdef"
C:\>
2、在 %a:~m,n% 中,如果 n 為負(fù)整數(shù),則先除掉 %a% 末尾的 -n 個(gè)字符的,再進(jìn)行截取操作:截取從偏移是 m 的字符(包括偏移是 m 的字符)開始,直到被截取原字符串的末尾字符(包括末尾字符)為止。
C:\>set a=abcdefg C:\>echo %a:~0,-3% abcd C:\>
“ %VAR:~ [ m [ ,n ] ]% ” 中,當(dāng) n 是負(fù)整數(shù),但該負(fù)整數(shù)的絕對(duì)值超出 %VAR% 的字符個(gè)數(shù)時(shí),則截取不到任何字符。
示例
:: 本示例包含漢字,如執(zhí)行亂碼,請(qǐng)使用 Notepad++ 把本文檔轉(zhuǎn)化成ANSI編碼 【標(biāo)注一】 ::demo.bat @echo off set "a=abcdef" echo 截取前的值: "%a%" :: n的絕對(duì)值超出 %a% 的字符個(gè)數(shù) set var=%a:~-1,-7% echo 截取后的值: "%var%"
運(yùn)行
C:\>demo
截取前的值: "abcdef"
截取后的值: ""
C:\>
【關(guān)于被截取變量的值】
“ %VAR:~ [ m [ ,n ] ]% ” 中,字符串截取操作發(fā)生后,VAR 的值不會(huì)改變
示例
:: 本示例包含漢字,如執(zhí)行亂碼,請(qǐng)使用 Notepad++ 把本文檔轉(zhuǎn)化成ANSI編碼 【標(biāo)注一】 ::demo.bat @echo off set "a=abcdef" echo 截取前的值: "%a%" :: 從%a%第二個(gè)字符(其偏移為1)開始,截取2個(gè)字符 set var=%a:~1,2% echo 截取后的值: "%var%" :: 截取操作發(fā)生后,a的值不會(huì)改變 echo a的值: "%a%"
【標(biāo)注一】 下載Notepad++
運(yùn)行
C:\>demo
截取前的值: "abcdef"
截取后的值: "bc"
a的值: "abcdef"
C:\>
【關(guān)于缺省值】
1、“ %VAR:~ [ m [ ,n ] ]% ” 中,n 的缺省值為 0
示例
:: 本示例包含漢字,如執(zhí)行亂碼,請(qǐng)使用 Notepad++ 把本文檔轉(zhuǎn)化成ANSI編碼 【標(biāo)注一】 ::demo.bat @echo off set "a=abcdef" echo 截取前的值: "%a%" :: 從%a%第二個(gè)字符(其偏移為1)開始,截取 0 (n的缺省值是0)個(gè)字符 set var=%a:~1,% echo 截取后的值: "%var%"
運(yùn)行
C:\>demo
截取前的值: "abcdef"
截取后的值: ""
C:\>
2、“ %VAR:~ [ m [ ,n ] ]% ” 中,m 的缺省值為 0
示例
:: 本示例包含漢字,如執(zhí)行亂碼,請(qǐng)使用 Notepad++ 把本文檔轉(zhuǎn)化成ANSI編碼 【標(biāo)注一】 ::demo.bat @echo off set "a=abcdef" echo 截取前的值: "%a%" :: 從%a%的第一個(gè)字符(m的缺省值是0)開始,截取2個(gè)字符 set var=%a:~,2% echo 截取后的值: "%var%"
運(yùn)行
C:\>demo
截取前的值: "abcdef"
截取后的值: "ab"
C:\>
3、“ %VAR:~ [ m [ ,n ] ]% ” 中, n 和 ,(逗號(hào))都缺省時(shí),則 n 的值為:從偏移是 m 的字符(包括該字符)到結(jié)尾字符(包括該字符)的所有字符的個(gè)數(shù)
示例
:: 本示例包含漢字,如執(zhí)行亂碼,請(qǐng)使用 Notepad++ 把本文檔轉(zhuǎn)化成ANSI編碼 【標(biāo)注一】 ::demo.bat @echo off set "a=abcdef" echo 截取前的值: "%a%" :: 從%a%的第二個(gè)字符(m的缺省值是0)開始,截取到結(jié)尾的所有字符 set var=%a:~1% echo 截取后的值: "%var%"
運(yùn)行
C:\>demo
截取前的值: "abcdef"
截取后的值: "bcdef"
C:\>
【在變量延遲展開中使用字符串截取】
示例
:: 本示例包含漢字,如執(zhí)行亂碼,請(qǐng)使用 Notepad++ 把本文檔轉(zhuǎn)化成ANSI編碼 【標(biāo)注一】 ::demo.bat @echo off setlocal enableDelayedExpansion set "a=abcdef" echo 截取前的值: "!a!" :: 從 !a! 的第二個(gè)字符,截取長度為 2 的所有字符 set var=!a:~1,2! echo 截取后的值: "%var%"
運(yùn)行
C:\>demo
截取前的值: "abcdef"
截取后的值: "bc"
C:\>
【注意】
字符串的截取操作在引用變量的地方均可以,并不一定必須要有set命令
示例
:: 本示例包含漢字,如執(zhí)行亂碼,請(qǐng)使用 Notepad++ 把本文檔轉(zhuǎn)化成ANSI編碼 【標(biāo)注一】 ::demo.bat @echo off setlocal enableDelayedExpansion set "a=abcdef" echo 截取前的值: "!a!" ::使用echo命令直接輸出截取的字符串 :: 從 !a! 的第二個(gè)字符,截取長度為 2 的所有字符 echo 截取的字符串: !a:~1,2!
運(yùn)行
C:\>demo
截取前的值: "abcdef"
截取的字符串: bc
C:\>
到此這篇關(guān)于DOS批處理字符串截取的文章就介紹到這了,更多相關(guān)批處理字符串截取內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
開通局域網(wǎng)共享(訪問本機(jī)無需驗(yàn)證即可進(jìn)入的bat和注冊(cè)表文件
開通局域網(wǎng)共享(訪問本機(jī)無需驗(yàn)證即可進(jìn)入的bat和注冊(cè)表文件...2007-10-10不錯(cuò)的winodws XP 優(yōu)化處理文件
不錯(cuò)的winodws XP 優(yōu)化處理文件...2007-08-08