namejm版主為了說明截取變數中字串的問題曾經舉過如下這個例子:
@echo off
set str=123456789
echo 第一個字元為:%str:~0,1%
echo 頭兩個字元為:%str:~0,2%
echo 頭5個字元為:%str:~0,5%
echo 去掉最後一個字元後的字串為:%str:~0,-1%
echo 去掉最後3個字元後的字串為:%str:~0,-3%
echo 第4個字元為:%str:~3,1%
echo 第4個及其之後的3個字元為:%str:~3,4%
echo 最後一個字元為:%str:~-1%
echo 最後一個字元為:%str:~-1,1%
echo 最後一個字元為:%str:~-1,2%
echo 倒數第4個字元為:%str:~-4,1%
echo 倒數第4個及其之後的字元為:%str:~-4%
echo 倒數第4個及其之後的1個字元為:%str:~-4,2%
echo 倒數第4個及其之後的2個字元為:%str:~-4,3%
pause
為了說明這個問題,我在這裡把批處理取字元,做下進一步的解釋,希望對新手有所啟發
如下:
echo %var:~n,k%
我們在這裡對每個參數做個說明:"%var",即我們要從中要截取字元的字串." ~ "取字
符標誌符(我是這麼理解的),"n" 我們將其理解為指標,"k"我們將其理解為位移地址.(注
:指標和位移地址都是從零開始數的)
我們還是用namejm版主的例子做下說明:
@echo off
set str=123456789
rem 定義一個str字串為123456789
echo 第一個字元為:%str:~0,1%
rem 指標為0,位移地址為1,即從第0位開始,取1位
echo 頭兩個字元為:%str:~0,2%
rem 指標為0,位移地址為2,即從第0位開始,取2位
echo 頭5個字元為:%str:~0,5%
rem 指標為0,位移地址為5,即從第0位開始,取5位
echo 去掉最後一個字元後的字串為:%str:~0,-1%
rem 當"k"為負值時,我們可以這樣理解:從指標開始處開始取其後面所有字元,然後減去
後面"abs(k)位"..所以這個句字我們可以做如下解釋:從第0位開始取其全部字元
為:123456789然後從後面減去abs(k)位,所以最後結果為:12345678
echo 去掉最後3個字元後的字串為:%str:~0,-3%
rem 該句解釋同上↑
echo 最後一個字元為:%str:~-1%
rem 參數"n,"和"k"都可以為預設,預設"n,"時可以理解為:從abs(k)位開始取其全部
echo 倒數第4個及其之後的字元為:%str:~-4%
rem 解釋同上↑
echo 最後一個字元為:%str:~-1,1%
rem n為負值時,表示從後面開始截取字元,取k位(此時n應從1開始數)
echo 最後一個字元為:%str:~-1,2%
rem 解釋同上↑
echo 倒數第4個字元為:%str:~-4,1%
rem 解釋同上↑
echo 倒數第4個及其之後的1個字元為:%str:~-4,2%
rem 解釋同上↑
echo 倒數第4個及其之後的2個字元為:%str:~-4,3%
rem 解釋同上↑
pause