Date: 2018.6.11
1、参考
https://www.cnblogs.com/Braveliu/p/5081084.html
https://blog.csdn.net/zhouzihan520xj/article/details/40301041
https://blog.csdn.net/yuntiank/article/details/7481264
https://blog.csdn.net/listener51/article/details/80631448
2、set命令主要用法
2.1 set打印系统环境变量
直接cmd下,输入set即可!
2.2 set设置变量的值(主要功能)
set aa=0123456789
echo %aa% ##引用变量的值
0123456789
2.3 set /p(基本功能)
set /p var=请输入变量的值:
echo %var%
命令解析: /p命令语法,作用可以在用户输入前加一段说明性的描述,即想让用户输入什么内容之类的说明。这条命令可以用于根据提示获取用户输入!
2.4 set /a(基本功能)
@echo off
rem +运算符
set /a var=1+1
echo %var%
rem ()运算符
set /a var=(1+1) + (1+1)
echo %var%
rem *运算符
set /a var*=2
echo %var%
rem ,运算符 注意:求varB和varC时,两种写法的区别
set /a varA=var, varB=%var%*2, varC=var*3
echo %varA% %varB% %varC%
rem 与运算符,必须双引号括起来
set /a varD=1"&"0
echo %varD%
rem 或运算符,必须双引号括起来
set /a varE=1"|"0
echo %varE%
rem 异运算符,必须双引号括起来
set /a varF=0"^"0
echo %varF%
pause>nul
运行结果:
e
命令解析: /a expression 即可以用各种表达式为变量赋值。
2.5 set符号或变量替换(高级功能)
set src=I love you
echo %src%
set dest=%src:you=her%
echo %dest%
运行结果:
命令解析:
set des=%src:str1=str2%
作用:把源变量src的值中所有的str1字符串替换成str2字符串,从而组合形成目标变量des的值。
应用:bat文件命令行去除变量的空格:
set abc= u v w x y z
set "abc=%abc: =%"
echo 去除所有空格后结果为:%abc%
pause
2.6 set取舍/字符提取(高级功能)
%data:~0,4%
假设:箭头→ ← 分别表示向右、向左
set aa=1234567890
echo %aa:~1,5% //指针向右→偏移1位,然后从指针处开始向右→提取5个字符.
echo %aa:~0,-3% //指针不偏移,→提取所有字符,并除去最后3个字符.
echo %aa:~5% //单个数字,不指定长度值.表示指针→偏移5个字符,然后,→提取所有字符.
echo %aa:~-5% //单个负值,特例,表示指针反方向偏移,从最右端起,←偏移5位,然后从指针处开始提取所有字符.也可以简单理解为提取字符串末尾5个字符.
总结:
1、偏移量为正值时,表示指针向右移动;为负值时,表示指针从字符串最右端起向左移动.
2、如果长度值为正,表示向右提取若干个字符;如果为负,表示向右提取所有字符,并去除若干个字符.”若干个=长度值的绝对值。”提取字符的方向总是自左向右进行的.
3、如果为单个数字,那么这个数字表示的是偏移量,长度值取默认值,既是字符串的”余数”,也就是从指针处开始,向右方向的所有字符.如果这个数字是负数,可以简单的理解为:提取字符串末尾的若干个字符.(正确的解释应该是:表示指针反方向偏移,从最右端起,←偏移若干位,然后从指针处开始→提取所有字符)
3、for /f命令用法
解析文本功能
命令格式:
1.FOR /F ["options"] %%i IN (file) DO command
2.FOR /F ["options"] %%i IN ("string") DO command--注意双引号
3.FOR /F ["options"] %%i IN ('command') DO command--注意单引号
参数说明:
file代表一个或多个文件,可以使用通配符。
string 代表字符串
command代表命令
[“options”]选项有多个:
eol=c - 指定一个行注释字符,遇到c开头的行就忽略掉。
skip=n - 指定在文件开始时忽略的行数。
delims=xxx - 指定分隔符。默认是空格和TAB。
tokens=x,y,m-n - 指每行的哪一个符号被传递到每个迭代
的 for 本身。这会导致额外变量名称的分配。m-n
格式为一个范围。通过 nth 符号指定 mth。如果
符号字符串中的最后一个字符星号,
那么额外的变量将在最后一个符号解析之后
分配并接受行的保留文本。
usebackq-usebackq 是一个增强型参数,当使用了这个参数之后,原来的for语句中第一个括号内的写法要做如下变动:如果第一个括号里的对象是一条命令语句的话,原来的单引号’要改为后引号`;如果第一个括号里的对象是字符串的话,原来的双引号”要改为单引号’;如果第一个括号里的对象是文件名的话,要用双引号”括起来。
for /p详细用法详见https://blog.csdn.net/yuntiank/article/details/7481264
1)切分字符串:
for /f "delims=," %%i in (test.txt) do echo %%i
2)userbackq使用
FOR /F "usebackq delims==" %i IN (`set`) DO @echo %i
usebackq 是一个增强型参数,当使用了这个参数之后,原来的for语句中第一个括号内的写法要做如下变动:如果第一个括号里的对象是一条命令语句的话,原来的单引号’要改为后引号`;如果第一个括号里的对象是字符串的话,原来的双引号”要改为单引号’;如果第一个括号里的对象是文件名的话,要用双引号”括起来。
4、findstr命令用法
功能:在文件中寻找匹配的字符串
C:\Users\Administrator>help findstr
在文件中寻找字符串。
FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/P] [/F:file]
[/C:string] [/G:file] [/D:dir list] [/A:color attributes] [/OFF[LINE]]
strings [[drive:][path]filename[ …]]
/B 在一行的开始配对模式。
/E 在一行的结尾配对模式。
/L 按字使用搜索字符串。
/R 将搜索字符串作为一般表达式使用。
/S 在当前目录和所有子目录中搜索匹配文件。
/I 指定搜索不分大小写。
/X 打印完全匹配的行。
/V 只打印不包含匹配的行。
/N 在匹配的每行前打印行数。
/M 如果文件含有匹配项,只打印其文件名。
/O 在每个匹配行前打印字符偏移量。
/P 忽略有不可打印字符的文件。
/OFF[LINE] 不跳过带有脱机属性集的文件。
/A:attr 指定有十六进位数字的颜色属性。请见 “color /?”
/F:file 从指定文件读文件列表 (/ 代表控制台)。
/C:string 使用指定字符串作为文字搜索字符串。
/G:file 从指定的文件获得搜索字符串。 (/ 代表控制台)。
/D:dir 查找以分号为分隔符的目录列表
strings 要查找的文字。
[drive:][path]filename
指定要查找的文件。
除非参数有 /C 前缀,请使用空格隔开搜索字符串。
例如: ‘FINDSTR “hello there” x.y’ 在文件 x.y 中寻找 “hello” 或
“there”。’FINDSTR /C:”hello there” x.y’ 文件 x.y 寻找
“hello there”。
正则表达式的快速参考:
. 通配符: 任何字符
* 重复: 以前字符或类出现零或零以上次数
^ 行位置: 行的开始
$ 行位置: 行的结尾
[class] 字符类: 任何在字符集中的字符
[^class] 补字符类: 任何不在字符集中的字符
[x-y] 范围: 在指定范围内的任何字符
\x Escape: 元字符 x 的文字用法
功能测试可参考:
https://blog.csdn.net/zhouzihan520xj/article/details/40301041