龙空技术网

黑客必修11:批处理高级语句——set命令详解(上)

鱼跃刺桐 113

前言:

而今看官们对“bat执行完不关闭窗口”大概比较珍视,我们都需要学习一些“bat执行完不关闭窗口”的相关文章。那么小编也在网上搜集了一些对于“bat执行完不关闭窗口””的相关资讯,希望姐妹们能喜欢,大家快快来学习一下吧!

三.批处理高级语句篇

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

标签: #bat执行完不关闭窗口