三.批處理進階語句篇
3.3 學習set指令詳解
學習要點:
1.用set 指令設定自定義變量
2.用set 指令進行字元串處理
3.用set 指令進行簡單計算
一、用set 指令設定自定義變量
格式:set [variable=[string]]
variable 指定環境變量名。 string 指定要指派給變量variable的一系列字元串。
例1,
@echo off
set var=abcd
echo %var%
pause
在例1中,set var=abcd 是批處理設定變量的方法。Var是變量名,而abcd則是變量名var的值。echo %var% ,在批
進行中我們要引用這個變量就把var 變量名用兩個%(百分号)擴起來,如%var%
注意:以下用法将清除變量variable 的值,使其變成未定義狀态。
set variable=
上面等号後面無任何符号,如果寫成SET variable="",此時變量值并不為空,而是等于兩個引号,即""
例2,
@echo off
set var=
set var1=""
if defined var (echo var的值為%var%) else echo var沒有指派
if defined var1 (echo var1的值為%var1%) else echo var1沒有指派
pause
set還可以提供一個互動界面,讓使用者自己輸入變量的值,然後我們在來根據這個值來做相應操作,現在我就來說說set
的這種文法,隻需要加一個"/P"參數就可以了!
例3,
@echo off
set /p var=請輸入變量的值:
echo 您輸入了%var%
pause
執行上面的批處理時,系統會提示你:“請輸入變量的值:”還是自己動手嘗試一下吧,呵呵!
二、用set 指令進行字元串處理
1、字元串替換
格式:%PATH:str1=str2%
意思就是:将字元串變量%PATH%中的str1 替換為str2
例4,
@echo off
set a= bbs. bathome. cn
echo 替換前的值: "%a%"
set var=%a: =%
echo 替換後的值: "%var%"
pause
執行後顯示:
替換前的值: " bbs. bathome. cn"
替換後的值: "bbs.bathome.cn"
對比一下,我們發現它把變量%a%的空格給替換掉了, 而%PATH:str1=str2%這個操作就是把變量%PATH%的裡的str1 全
部用str2 替換。
例5,
@echo off
set a= bbs.bathome.cn
echo 替換前的值: "%a%"
set var=%a:.=小情%
echo 替換後的值: "%var%"
pause
執行後顯示:
替換前的值: " bbs.bathome.cn"
替換後的值: " bbs小情bathome小情cn"
這裡是把變量%a%裡面的"."全部替換為"小情",大家多多動手練習就會了,這個沒有什麼難的,呵呵~~
2、字元串截取
格式:%a:~[m[,n]]%
方括号表示可選,%為變量辨別符,a為變量名,不可少,冒号用于分隔變量名和說明部分,符号~可以簡單了解為“
偏移”即可,m 為偏移量(預設為0),n 為截取長度(預設為全部)
例6,
@echo off
set a=bbs.bathome.cn
set var=%a:~1,3%
echo %var%
pause
執行顯示為:bs.
我們來分析一下set var=%a:~1,3% ,這裡%a:~1,3%就是說變量 a 偏移量為1,要截取它的3位字元長度。合起來就是
把變量a 的值從第2 位(偏移量 1)開始,截取3 個字元賦予變量var
例7,
@echo off
set a=bbs.bathome.cn
set var=%a:~1,-3%
echo %var%
pause
執行顯示:bs.bathome
這裡就是把變量a 第2位起到倒數第3位前的值賦予var
例8,
@echo off
set a=bbs.bathome.cn
set var=%a:~-3%
echo %var%
pause
執行顯示:.cn
這裡就是就是把變量a 倒數 3 位的值賦予變量var
例9,
@echo off
set a=bbs.bathome.cn
set var=%a:~-3,2%
echo %var%
pause
執行顯示:.c
這裡就是就是把變量a 倒數 3 位的值的前2位賦予變量var
例10,
@echo off
set a=bbs.bathome.cn
set var=%a:~3%
echo %var%
pause
執行顯示:.bathome.cn
這裡就是把變量a 從第3 位開始後面全部的值給變量var
上面這幾個例子要好好的記住哦,而且不要記錯了!
我們還是總結一下吧:
a=bbs.bathome.cn
%a:~1,3% -------- “bs.” 變量a 偏離1位,截取3位字元。
%a:~1,-3% -------- “bs.bathome” 變量a 偏離1位,截取倒數第3位前的字元。
%a:~-3% -------- “.cn” 變量a 偏離-3位,截取倒數的3位字元。
%a:~-3,2% -------- “.c” 變量a 偏離-3位,截取倒數後3位的前兩2位字元
%a:~3% -------- “.bathome.cn”變量a 偏離3位,截取完後面的字元。
%a:~,3% -------- “bbs” 變量a 偏離0位,截取3位字元。
我們來道綜合題:輸入任意字元串,求字元串的長度
例11,
@echo off
set /p str=請輸入任意長度的字元串:
echo 你輸入了字元串:"%str%"
call :stringlenth "%str%" num
echo 字元串長度為:%num%
pause
:stringLenth
::字元串長度計算子程式
set thestring=%~1
::參數%1 為字元串"%str%",%~1則去掉"%str%"的雙引号。
if not defined theString goto :eof
set Return=0
:stringLenth_continue
set /a Return =1
set thestring=%thestring:~0,-1%
::偏移量為1,截取倒數第1位前的所有字元。
if defined thestring goto stringLenth_continue
if not "%2"=="" set %2=%Return%
::參數%2為傳回變量num的名稱,不能含空格或特殊字元。
goto :eof
最後,提供一下batmat寫的一個例子幫助大家對截取字元的了解吧:
例子:
@echo off&color a&mode con cols=90 lines=12
title 截取字元練習工具 by bat-zw19750516
set var=1234567890一二三四五六七八九零
cls&echo.&echo 原始圖案為:%var%
echo.&echo 注意前面有10個阿拉伯數字後面有10個國文數字,等下截取後記得看下。
echo.&echo 指令形式為:%%var:~m,n%%,其中的m為第一個參數可負可正可為零,n為第二個參數可負可正不為零。
echo.&echo 為了友善重複練習沒有設定退出,要退出請直接關閉視窗。
echo.&echo 請按任意鍵開始練習。&pause>nul
:begin
set a=&set b=&set "c="
cls&echo.&set /p a= 請輸入第一個參數(應為小于20的整數):
echo %a:-=%|findstr "[^0-9]"&&goto wrong
if "%a%" equ "" goto wrong
if %a% geq 20 goto wrong
cls&echo.&set /p b= 請輸入第二個參數(應為大于-20并不為零的整數):
echo %b:-=%|findstr "[^0-9]"&&goto wrong
if "%b%" equ "" goto wrong
if %b% equ 0 goto wrong
if %b% lss -20 goto wrong
set /a c=20-a b
if %a% lss 0 if %b% lss 0 if %a% geq %b% goto wrong
if %a% gtr 0 if %b% lss 0 if %c% leq 0 goto wrong
cls&echo.&echo 原始圖案為: %var%
echo.&echo 你輸入的截取指令是: %%var:~%a%,%b%%%
echo.&call,echo 截取到的圖案是 :%%var:~%a%,%b%%%
echo.&echo 請按任意鍵再次練習。&pause>nul&goto begin
:wrong
cls&echo.&echo 輸入不合要求,請正确輸入。&ping /n 2 127.1 >nul&goto begin