1、%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、如果为单个数字,那么这个数字表示的是偏移量,长度值取默认值,既是字符串的”余数”,也就是从指针处开始,向右方向的所有字符.如果这个数字是负数,可以简单的理解为:提取字符串末尾的若干个字符.(正确的解释应该是:表示指针反方向偏移,←偏移若干位,然后从指针处开始→提取所有字符)
参考网址:https://blog.csdn.net/cyxlxp8411/article/details/7555541
2、%variable:str1=str2%
%variable:str1=str2% which means: ‘replace every str1 in variable with str2’.
示例:去除字符串中所有的空格
set abc= u v w x y z
set "abc=%abc: =%"
echo 去除所有空格后结果为:%abc%
参考网址:https://stackoverflow.com/questions/5816178/how-to-replace-string-inside-a-bat-file-with-command-line-parameter-string
https://en.wikipedia.org/wiki/Batch_file
https://blog.csdn.net/sinat_16741503/article/details/72869123
3、for /f 详解
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和使用usebackq时集合内的符号比较:
未使用参数usebackq时 | 使用参数usebackq时 | |
---|---|---|
双引号”” | 表示字符串,即”string”。 | 当文件路径或名称中有空格时,用双引号括起来。 |
单引号’’ | 表示执行命令,即’command’ 。 | 表示字符串,即’string’ 。 |
后引号“ | 表示命令执行,即“command ”。 |
参考网址:http://www.bathome.net/thread-9512-1-1.html
https://blog.csdn.net/gameloft9/article/details/20902681
http://www.360doc.com/content/15/1014/01/1564981_505480271.shtml