首页 > 编程 > BAT > 正文

批处理(bat)命令学习的一些总结

2020-06-09 13:59:25
字体:
来源:转载
供稿:网友

一、set 篇:

1、set(无开关)

set .=test
set.
::若一个变量以:/.这三个与路径相关的符号开头,用set查看以该字符打头的变量时可以省去一个空格。
echo %tmp:*/=%
::显示tmp变量第一个/之后的部分,其余变量替换与变量偏移太简单不解释

2、set /p 变量名=注释<设备名
当设备名为文件时,因为文件中换行符与回车符伴生,所以只取文件第一行作为var变量的内容,但是不超过1024字节;而当设备名为nul或者com3时,只显示不换行的注释,这种情况下可以省略变量名(如:set /p=Hello World

3、set /a,最具技巧的命令之一

set /a n=1,m=2
::同时把不同数值分别赋予两个变量
set /a a=b=c=d=e=f=1
::用一条算式为多个变量同时赋值
set /a "1/n" 2>nul||echo 变量n非纯数字或为零
::利用分母不能为0的特征,用set判断一个变量是否为非零纯数字
set n=1
set /a "n=!!123|!!234&!!0"
::位运算,!、^、|和&常用于布尔运算,而逻辑位移常用于二进制运算(>>还可判断数值是否为负,见下例)
set /a n=-100,"1/(-100>>31)"||echo 变量n为负数
::顺应cmd中的正负数存储特点,可以用逻辑位移实现判断正负数的“布尔运算”,可以衍生出繁多的算法,比如稍加改动就可以比较两数甚至多个数的大小
set /a n=~-100
::利用~将所有二进制的1、0逆转,负号在后或在前配合可以实现简单加1或减1,这个技巧主要用来减少括号的使用,因为~号与负号的优先级都是高于算数运算符的
set /a test=%test:~5,1%-0
::可以避免%test:~5,1%为空时出错的情况
set /a 十进制=0x十六进制,十进制=0八进制
::快速将十六进制与八进制数转为十进制,可惜没有二进制...
:loop
set /a n+=1001
echo %n:~-3%
goto loop
::这比常规的补位方法更优越
for %%a in (test 123 ABC test @#$ 123) do set /a ".%%a+=1"
set .|findstr /v /e "=1"
::经典的获取字符串的重复次数的方案

二、for 篇:

这是批处理中最强的内部命令,没有之一!

1、for(无开关)

代码如下:
for %%a in (c:/*.*) do echo %%a
::显示C盘根目录下所有非隐藏、非系统属性文件
for %%a in (./..) do echo %%~nxa
::显示上一级目录的文件夹名
set str=123,234,345
set str=%str:,=/%
for %%a in (%str%/..) do echo %%~nxa
::用前一个技巧,巧取倒数第二段字符串,与for /f "delims=/"相映成趣
for %%a in (*.txt) do (
for /f "useback delims=" %%b in ("%%a") do (
set str=%%b
for %%c in ("!str:分隔符=" "!") do (
for /f "tokens=1*" %%d in (%%c) do echo %%~d
)
)
)

::不带参数的for与for /f配合,威力极大,仅举此一例

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表