bat语法点滴批处理Set命令详解让你理解set命令Word下载.docx
《bat语法点滴批处理Set命令详解让你理解set命令Word下载.docx》由会员分享,可在线阅读,更多相关《bat语法点滴批处理Set命令详解让你理解set命令Word下载.docx(11页珍藏版)》请在冰豆网上搜索。
在环境变量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这样结果就显示出来了,其他逻辑或取余操作符用法
+"
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=<
nul相当于输出字符并不带回车,利用这个性质,可以做出比较漂亮的动画),用法示例:
for/l%%iin(1170)do(
set/p=O<
for/l%%ain(1150)dover>
)
注:
代码中用到了一句for/l%%ain(1150)dover>
nul,它的目的是利用for循环运行某一命令来达到延时的目的。
5、利用set截取字符保存下面的代码为test.bat运行查看即可。
@echooff&
color1f&
remnum=15nums=30
modecon:
cols=80lines=35
var=90"
num="
nums="
rem第一屏舍弃
cls&
echo第一屏舍弃
echo\&
echo%num%var=%var%&
echo\
for/l%%iin(113)docall:
dan%%i
for/l%%iin(011)docall:
yi%%i
for/l%%iin(012)docall:
_yi%%i
echo~波浪号后面的数字:
为正数表示舍弃变量的前位;
echo,逗号后面的数字为正数表示取变量的舍弃以后的前几位;
echo,逗号后面为负数表示舍弃变量的后几位
pause&
color1e
rem第二屏取
echo第二屏取
for/l%%iin(-1-1-3)docall:
for/l%%iin(-4-1-6)docall:
er%%i
call:
_er-8
echo~波浪号后面直接跟负数表示取变量的后几位
color1f
rem第三屏替换删除
echo第三屏替换删除
var=abc:
\123\ef:
g\123\456"
hij"
789"
klm\"
echo%num%var=%var%
san
echo=号左边为要替换掉的字符,右边为需替换来的字符
echo=号左边要替换掉的字符前面加个*号,代表第一次出现的字符及其前面的所有字符
echo=========演示完毕=========按任意键退出==========
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:
callecho%%str1:
~0,15%%%%str2:
~0,30%%%%str3:
~0,15%%
goto:
eof
yi
for/l%%iin(113)do(
~%1,%%i%%%num%
setstr2=%aa%var的%ji%%shu%位之后取%%i位%nums%
~0,26%%%%str3:
if%%i==3echo\
_yi
for/l%%iin(-1-1-3)do(
setstr2=舍弃var的前%1位和%%i位%nums%
~0,28%%%%str3:
if%%i==-3echo\
er
setsss=%1
setsss=%sss:
setstr2=从var的倒数%sss%位开始取%%i位%nums%
~0,15%%%%