天天看點

黑客必修11:批處理進階語句——set指令詳解(上)

作者:魚躍刺桐

三.批處理進階語句篇

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

繼續閱讀