bat语法点滴批处理Set命令详解让你理解set命令.docx

上传人:b****3 文档编号:10890713 上传时间:2023-05-28 格式:DOCX 页数:11 大小:21.03KB
下载 相关 举报
bat语法点滴批处理Set命令详解让你理解set命令.docx_第1页
第1页 / 共11页
bat语法点滴批处理Set命令详解让你理解set命令.docx_第2页
第2页 / 共11页
bat语法点滴批处理Set命令详解让你理解set命令.docx_第3页
第3页 / 共11页
bat语法点滴批处理Set命令详解让你理解set命令.docx_第4页
第4页 / 共11页
bat语法点滴批处理Set命令详解让你理解set命令.docx_第5页
第5页 / 共11页
bat语法点滴批处理Set命令详解让你理解set命令.docx_第6页
第6页 / 共11页
bat语法点滴批处理Set命令详解让你理解set命令.docx_第7页
第7页 / 共11页
bat语法点滴批处理Set命令详解让你理解set命令.docx_第8页
第8页 / 共11页
bat语法点滴批处理Set命令详解让你理解set命令.docx_第9页
第9页 / 共11页
bat语法点滴批处理Set命令详解让你理解set命令.docx_第10页
第10页 / 共11页
bat语法点滴批处理Set命令详解让你理解set命令.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

bat语法点滴批处理Set命令详解让你理解set命令.docx

《bat语法点滴批处理Set命令详解让你理解set命令.docx》由会员分享,可在线阅读,更多相关《bat语法点滴批处理Set命令详解让你理解set命令.docx(11页珍藏版)》请在冰点文库上搜索。

bat语法点滴批处理Set命令详解让你理解set命令.docx

bat语法点滴批处理Set命令详解让你理解set命令

bat语法点滴批处理Set命令详解让你理解set命令

2011年05月06日星期五15:

30

1.转义符^

^"="

2.

另外,FOR中的变量已被增强,我们可以使用下列句法来引用变量:

  %~I    -扩充%I为删除外围"引号(有就删)

  %~fI    -扩充%I为一个完整的路径

  %~dI    -仅扩充%I为一个驱动器号

  %~pI    -仅扩充%I为一个路径

  %~nI    -仅扩充%I为一个文件名

  %~xI    -仅扩充%I为一个文件扩展名

  %~sI    -扩充%I为完整的短名路径

  %~aI    -扩充%I为文件的属性(ARSH)

  %~tI    -扩充%I为文件的日期时间(修改时间)

  %~zI    -扩充%I为文件的大小(字节计)

  %~$PATH:

I -◎变量可以是其他的,如:

WinDIR、ProgramFiles等

         在环境变量PATH指定的路径中搜索文件,

         扩充%I为找到的第一个文件的完整路径;

         若未找到文件,则扩充%I为空。

组合扩展参数效果:

%~dpI    -仅扩充%I为驱动器号和路径

%~nxI    -仅扩充%I为文件名加扩展名

%~fsI    -扩充%I为完整的短名路径(同%~sI)

%~dp$PATH:

I -搜索变量PATH中的路径,

         仅扩充%I为找到的第一个文件驱动器号和路径。

%~ftzaI   -扩充%I为类似DIR命令的输出格式

以上例子中,%I和PATH可用其他有效的变量替代。

%~百分号加波浪线用法是后面必须跟有效的FOR变量名。

推荐使用诸如%I的大写变量名,这样不仅易读且可避免混淆。

◎当然这是因人而异的。

 如果是for中的变量例如%%i可以写成%%~ni

网上看了很多的set命令,但对于set/a这类参数不是很详细,脚本之家编辑特从网上收集一些实际的例子等,结合在一起,让大家能快速的理解。

set,E文翻译过来就是“设置”的意思,相当于数学里的“令”。

如:

setX=5,就是令X=5的意思。

set的通常用法示例:

1、set显示环境变量:

如:

在命令行下输入:

set会显示当前所有的系统环境变量

setc会显示所有的以c开头或C开头的变量(也即不区分大小写);

setcom会显示所有的以com开头或COM开头的变量(不区分大小写);

2、set设置环境变量,用法示例:

set表达式,

如:

setstr=ok

就是将变量str的值设置成字符串“OK”

注意:

setstr=ok>

这个在批处理运行过程中会出错,系统会提示:

“命令语法不正确。

原因是,因为变量str中的值“ok>”的字符">"为一特殊字符,会被系统当成定向符处理,所以会运行出错,那如果确实要设置这样的变量str,值为"ok>"怎么办呢?

解决办法有二:

将特殊字符转义,转义方法在该特殊字符前加一个“^”,如:

setstr=ok^>(这种方法比较少用,因为没有多少应用价值)

常见的解决办法,在set后面将整个表达式用引号括起来,如:

set"str=>"

3、带参数/a的set数值计算

set的/A参数就是让SET可以支持数学符号进行加减等一些数学运算!

支持的数学运算包含(优先权递减):

()-分组

!

~--一元运算符

*/%-算数运算符

+--算数运算符

<<>>-逻辑移位

&-按位“与”

^-按位“异”

|-按位“或”

=*=/=%=+=-=-赋值

&=^=|=<<=>>=

-表达式分隔符

用法示例:

set/anum=2*10,这样变量num的值将变为:

20

复制代码代码如下:

set/avar=2-1结果是多少呢?

如果你看不到结果就echo%var%.....

set/avar=2*2乘法运算

set/avar=2/2除法运算

set/avar=(1+1)+(1+1)结果等于4看得懂吧!

set/aa=1+1,b=2+1,c=3+1运行后会显示一个4,但我们用

echo%a%%b%%c%后看结果,会发现其他数学运算也有效果!

这就是"斗"号的

作用!

有时候我们需要直接在原变量进行加减操作就可以用这种语法

set/avar+=1这样的语法对应原始语法就是set/avar=%var%+1

都是一样的结果。

对于"逻辑或取余操作符",我们需要把他们用双引号引起来,看例子

复制代码代码如下:

set/avar=1"&"1这样结果就显示出来了,其他逻辑或取余操作符用法

set/avar=1"+"1异运算

set/avar=1"%"1取模运算

set/avar=2"<<"2次方运算

set/avar=4">>"2这个不太记得数学里的叫法....

这些符号也可以用&=^=|=<<=>>=这样的简单用法如

set/avar"&="1等于set/avar=%var%"&"1注意引号

4、带参数/p的set等待用户输入

windows2000和windows是没有choice这个命令,choice的等待用户输入功能就要通过set/p来实现

演示如下:

复制代码代码如下:

@echooff

set/pstr=请输入你想输入的字符:

echo你输入的字符串为:

%str%

pause>nul

set/p的特殊应用(set/p=

复制代码代码如下:

@echooff

for/l%%iin(1170)do(

set/p=O

for/l%%ain(1150)dover>nul

pause>nul

注:

代码中用到了一句for/l%%ain(1150)dover>nul,它的目的是利用for循环运行某一命令来达到延时的目的。

5、利用set截取字符保存下面的代码为test.bat运行查看即可。

复制代码代码如下:

@echooff&color1f&remnum=15nums=30

modecon:

cols=80lines=35

set"var=90"

set"num="

set"nums="

rem第一屏舍弃

cls&echo第一屏舍弃

echo\&echo%num%var=%var%&echo\

for/l%%iin(113)docall:

dan%%i

echo\

for/l%%iin(011)docall:

yi%%i

echo\

for/l%%iin(012)docall:

_yi%%i

echo~波浪号后面的数字:

为正数表示舍弃变量的前位;

echo,逗号后面的数字为正数表示取变量的舍弃以后的前几位;

echo,逗号后面为负数表示舍弃变量的后几位

echo\&echo\&pause&color1e

rem第二屏取

cls&echo第二屏取

echo\&echo%num%var=%var%&echo\

for/l%%iin(-1-1-3)docall:

dan%%i

echo\

for/l%%iin(-4-1-6)docall:

er%%i

echo\

call:

_er-8

echo~波浪号后面直接跟负数表示取变量的后几位

echo,逗号后面的数字为正数表示取变量的舍弃以后的前几位;

echo,逗号后面为负数表示舍弃变量的后几位

echo\&echo\&pause&color1f

rem第三屏替换删除

cls&echo第三屏替换删除

set"var=abc:

\123\ef:

g\123\456"hij"789"klm\"

echo\&echo%num%var=%var%

echo\

call:

san

echo=号左边为要替换掉的字符,右边为需替换来的字符

echo=号左边要替换掉的字符前面加个*号,代表第一次出现的字符及其前面的所有字符

echo\

echo=========演示完毕=========按任意键退出==========

pause>nul

exit

:

dan

setshu=%1

if%shu%lss0(setaa=取&setji=最后)elsesetaa=舍弃&setji=前

if"%shu:

~0,1%"=="-"setshu=%shu:

~1%

setstr1=%%var:

~%1%%%num%

setstr2=%aa%var的%ji%%shu%位%nums%

callsetstr3=%%var:

~%1%%%num%

callecho%%str1:

~0,15%%%%str2:

~0,30%%%%str3:

~0,15%%

goto:

eof

:

yi

setshu=%1

if%shu%lss0(setaa=取&setji=最后)elsesetaa=舍弃&setji=前

for/l%%iin(113)do(

setstr1=%%var:

~%1,%%i%%%num%

setstr2=%aa%var的%ji%%shu%位之后取%%i位%nums%

callsetstr3=%%var:

~%1,%%i%%%num%

callecho%%str1:

~0,15%%%%str2:

~0,26%%%%str3:

~0,15%%

if%%i==3echo\

goto:

eof

:

_yi

for/l%%iin(-1-1-3)do(

setstr1=%%var:

~%1,%%i%%%num%

setstr2=舍弃var的前%1位和%%i位%nums%

callsetstr3=%%var:

~%1,%%i%%%num%

callecho%%str1:

~0,15%%%%str2:

~0,28%%%%str3:

~0,15%%

if%%i==-3echo\

goto:

eof

:

er

setsss=%1

setsss=%sss:

~1%

for/l%%iin(113)do(

setstr1=%%var:

~%1,%%i%%%num%

setstr2=从var的倒数%sss%位开始取%%i位%nums%

callsetstr3=%%var:

~%1,%%i%%%num%

callecho%%str1:

~0,15%%%%str2:

~0,24%%%%str3:

~0,15%%

if%%i==3echo\

goto:

eof

:

_er

setsss=%1

setsss=%sss:

~1%

for/l%%iin(-1-1-3)do(

setstr1=%%var:

~%1,%%i%%%num%

setstr2=从var的倒数%sss%位开始并舍弃最后%%i位%nums%

callsetstr3=%%var:

~%1,%%i%%%num%

callecho%%str1:

~0,15%%%%str2:

~0,20%%%%str3:

~0,15%%

if%%i==-3echo\

goto:

eof

:

san

setstr1=%%var:

"=%%%num%

setstr2=删除var中的所有^"号%num%

setstr3=%var:

"=%%nums%

callecho%%str1:

~0,13%%%%str2:

~0,23%%%%str3:

~0,30%%

setstr1=%%var:

\=%%%num%

setstr2=删除var中的所有\号%num%

setstr3=%var:

\=%%nums%

callecho%%str1:

~0,13%%%%str2:

~0,23%%%%str3:

~0,30%%

setstr1=%%var:

:

=%%%num%

setstr2=删除var中的所有:

号%num%

setstr3=%var:

:

=%%nums%

callecho%%str1:

~0,13%%%%str2:

~0,23%%%%str3:

~0,30%%

echo\

setstr1=%%var:

"=好%%%num%

setstr2=替换var中的所有^"号为好字%num%

setstr3=%var:

"=好%%nums%

callecho%%str1:

~0,12%%%%str2:

~0,20%%%%str3:

~0,30%%

setstr1=%%var:

\=好%%%num%

setstr2=替换var中的所有\号为好字%num%

setstr3=%var:

\=好%%nums%

callecho%%str1:

~0,12%%%%str2:

~0,20%%%%str3:

~0,30%%

setstr1=%%var:

:

=好%%%num%

setstr2=替换var中的所有:

号为好字%num%

setstr3=%var:

:

=好%%nums%

callecho%%str1:

~0,12%%%%str2:

~0,20%%%%str3:

~0,30%%

echo\

setstr1=%%var:

*"=%%%num%

setstr3=%var:

*"=%%nums%

echo删除var中的第一次出现的^"号及其前面的所有字符

callecho%%str1:

~0,15%%%%str3:

~0,30%%

echo.

setstr1=%%var:

*\=%%%num%

setstr3=%var:

*\=%%nums%

echo删除var中的第一次出现的\号及其前面的所有字符

callecho%%str1:

~0,15%%%%str3:

~0,30%%

echo.

setstr1=%%var:

*:

=%%%num%

setstr3=%var:

*:

=%%nums%

echo删除var中的第一次出现的:

号及其前面的所有字符

callecho%%str1:

~0,15%%%%str3:

~0,30%%

echo\

setstr1=%%var:

*"=ppp%%%num%

setstr3=%var:

*"=ppp%%nums%

echo替换var中的第一次出现的^"号及其前面的所有字符为ppp

callecho%%str1:

~0,15%%%%str3:

~0,30%%

echo.

setstr1=%%var:

*\=ppp%%%num%

setstr3=%var:

*\=ppp%%nums%

echo替换var中的第一次出现的\号及其前面的所有字符为ppp

callecho%%str1:

~0,15%%%%str3:

~0,30%%

echo.

setstr1=%%var:

*:

=ppp%%%num%

setstr3=%var:

*:

=ppp%%nums%

echo替换var中的第一次出现的:

号及其前面的所有字符为ppp

callecho%%str1:

~0,15%%%%str3:

~0,30%%

echo\

goto:

eof批处理Set命令详解补充篇

一、设置自定义变量

复制代码代码如下:

@echooff

setvar=我是值

echo%var%

pause

二、设置自定义变量,并接受用户输入作为值

复制代码代码如下:

@echooff

@echooff

set/pvar=请输入变量的值:

if%var%==1echo您输入了1~_~

pause

三、SET/Aexpression

set的/A参数就是让SET可以支持数学符号进行加减等一些数学运算!

支持的数学运算包含(优先权递减):

复制代码代码如下:

()-分组

!

~--一元运算符

*/%-算数运算符

+--算数运算符

<<>>-逻辑移位

&-按位“与”

^-按位“异”

|-按位“或”

=*=/=%=+=-=-赋值

&=^=|=<<=>>=

-表达式分隔符

Batch代码

复制代码代码如下:

set/avar=2-1结果是多少呢?

如果你看不到结果就echo%var%.....

set/avar=2*2乘法运算

set/avar=2/2除法运算

set/avar=(1+1)+(1+1)结果等于4看得懂吧!

set/aa=1+1,b=2+1,c=3+1运行后会显示一个4,但我们用

echo%a%%b%%c%后看结果,会发现其他数学运算也有效果!

这就是"斗"号的作用!

有时候我们需要直接在原变量进行加减操作就可以用这种语法

set/avar+=1这样的语法对应原始语法就是set/avar=%var%+1

都是一样的结果。

对于"逻辑或取余操作符",我们需要把他们用双引号引起来,看例子

Batch代码

复制代码代码如下:

set/avar=1"&"1这样结果就显示出来了,其他逻辑或取余操作符用法

set/avar=1"+"1异运算

set/avar=1"%"1取模运算

set/avar=2"<<"2次方运算

set/avar=4">>"2这个不太记得数学里的叫法....

这些符号也可以用&=^=|=<<=>>=这样的简单用法如

set/avar"&="1等于set/avar=%var%"&"1注意引号

下面是一个具体的例子:

复制代码代码如下:

@echooff

setp=123

title密码是%p%

setn=1

:

in

if%n%gtr3gotowrong

set/pa=请输入您需要登陆的密码:

if"%a%"equ"%p%"gotoright

set/an+=1

gotoin

:

right

echo猜对了,新年快乐!

gotoend

:

wrong

echo已经输过3次了,还不正确,退出!

:

end

pause

四、替换变量值的内容

语法:

setnewVar="oldVar:

str1=str2%

将变量oldVar的值中的str1替换成str2,并将替换后的变量值赋给newVar.

看例子

复制代码代码如下:

@echooff

seta=

echo替换前的值:

"%a%"

setvar=%a:

bbs=sss%

echo替换后的值:

"%var%"

pause

对比一下,我们发现他把变量%a%的bbs给替换掉了,换成了sss.

五、字符串截取

1、%Var:

~start,len%

注意:

从0开始。

例如:

复制代码代码如下:

@echooff

seta=

setvar=%a:

~1,2%

echo%var%

pause

2、%Var:

~-len%

截取倒数len位

3、%Var:

~0,-len%

截取从第一位开始,倒数第len位结束的值。

例子

复制代码代码如下:

@echooff

seta=

setvar=%a:

~0,-3%

echo%var%

pause

执行后,我们发现显示的是"",少了"et"

从结果分析,很容易分析出,这是把变量a的值从0位开始,

到倒数第三位之间的值全部赋予给var

1、利用set/a去掉日期等数字前面的0,如:

2007-09-25中月份中的09前面的0(当然这个月份是未知的,简单的说就

是不管前面有没有0都要保证去掉):

演示代码:

复制代码代码如下:

@echooff

setDay=1%date:

~5,2%

set/aDay-=100

echo%Day%

pause>nul

另外,还可以(在深入运用时,比前一种更有优势):

复制代码代码如下:

@echooff

set/aday1=%date:

~5,1%,day2=%date:

~6,1%

set/aday=%day1%*10+%day2%

echo%day%

pause>nul

2、利用set/a(数值运算除法中除数不允许出现0)返回值来设置数值运算的进位标志;

演示代码:

@echooff2>nul3>nul

set/anum1=7,num2=2

set/avar=%num1%+%num2%

set/a1/(%var%/10)&&echo大于10||echo小于10

pause>nul

再附一特大数值的加法运算演示代码:

(先补位)

复制代码代码如下:

@echooff&setlocalenabledelayedexpansion

setnum1=697316

setnum2=000

call:

lineupnum1

call:

lineupnum2

set/aflag=0

for/l%%iin(11199)do(

set/avar=!

num1:

~-%%i,1!

+!

num2:

~-%%i,1!

+!

flag!

setvar=0!

var!

setflag=!

var:

~-2,1!

setstr=!

var:

~-1!

!

str!

for/f"delims=0tokens=*"%%iin("!

str!

")doecho%%i

pause>nul

:

lineupob

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2