1、截取字符串
從指定變量中截取指定位置的字符串,並返回。*這個處理,並不改變變量的值
語法格式:%變量名:~開始位置,終了位置%
注:正數的時候開始位置是從0開始向右計算,負數的時候從1開始向右計算。(跳的個數為指定開始位置的絕對值)
具體有以下幾種截取方式,看實例去理解用法,這個時候,我們假設有一個變量【var】,其值為【1234567890】。
①正常路線:
%var:~5,2% ⇒ 67
②無終了:
%var:~5% ⇒ 67890
③負終了:
%var:~5,-2% ⇒ 678
④負開始位置:
%var:~-6,2% ⇒ 56
⑤負開始無終了:
%var:~-6% ⇒ 567890
⑥負開始負終了:
%var:~-6,-2% ⇒ 5678
⑦沒有開始:
%var:~,4% ⇒ 1234
⑧無開始無終了:
%var% ⇒ 1234567890
正常的情況下,就這幾種截取的情況,完全可以根據我們業務的需要,來使用不同的方法來截取字符串。
這個字符串截取中,還是有幾個規律的
A、開始位置的計算:當開始位置指定為正數的時候,我們就可以從左側開始查找開始位置(左側第一個字符為0)
當開始位置省略或者為0的時候,開始位置那個字符就是要截取的開始字符。
當開始位置指定為負數的時候,我們就可以從右側開始查找指定位置(右側第一個字符為-1)
B、終了位置的計算:當終了位置指定為正數的時候,我們就可以從上述計算得到的終了位置查找終了位置(開始位置為1)
當終了位置省略或者為0的時候,字符串的終了位置就是要截取字符串的終了位置
當終了位置指定為負數的時候,我們就可以從右側開始查找指定位置(右側第一個字符為0)
C、最終截取的字符串就是開始位置到終了位置之間的字符串(包括開始位置和終了位置)
------------------------------------------------------------------------------------------------------------------------------------------------------
但是,這個字符串截取是不是有異常發生呢?有,也沒有。
當要截取的字符串不為空,並且,要截出的字符串不不能正常截出的時候,返回結果就是空值。
當要截取的字符串本身就是空的時候,取得結果就是【~開始位置,終了位置】,也就是命令的一部分被返回出來。
接下來繼續討論這個問題,既然要截取的字符串為空的時候,解出來的東西乖乖的,那我們能不能不讓它進去呢?當然,我們使用我們已知的字符串判斷函數就是可以的。
例如下面代碼的處理:
@echo off set var= IF DEFINED var ( echo DEFINED echo %var:~1,1% ) else ( echo NOT DEFINED )
運行結果為:
F:\tmp>a.bat
NOT DEFINED
可見,當var為空的時候,分支根本就沒有走進去。程序顯然沒有走進去,
當分歧沒有進去的時候,在該分歧內,我即使寫不合法的命令,也不會報錯的,不信你可以試試,反正我是試過了。
但是,下面這一點,就有點費解了,且看代碼:
@echo off set var= IF DEFINED var ( echo DEFINED IF %var:~1,1% EQU A ( echo true ) ) else ( echo NOT DEFINED )
這個時候,紅色字體部分雖然跑不到,但是,竟然跑不過,所以,我就郁悶了。(報1的使用方法不對。--1 の使い方が誤っています。)
batch程序的執行方式是什么的?不知道,想知道,但是,又不知道到哪里知道去。
2、字符串替換
字符串替換,就是把某一字符串中的特定字符或字符串替換為給定的字符串
語法結構:%變量名:替換前=替換后%
替換前不可以為空,但是,替換后可以為空
還有一點,變換前和變換后不能用變量表示,而變量名只能有變量名來表示。
例:%var:123=abc%
3.字符串拼接,直接將兩個字符串放到一塊兒就可以了。
例如:字符串123和abc拼接,那么就可以寫成123abc
如果是字符串變量123和abc拼接,那么就可以寫成%123%%abc%
4、字符串查找,例如,查找字符串345在字符串123456789123456789中位置
哈哈,這個我還不知道,以后知道了再補上去。如果系統沒有給出方法的話,就只能寫方法查找了。