goto 跟c里面差不多 , 标记用"adkfjdf:"来表示 , 然后"goto adkfjdf" for FOR %variable IN (set) DO command [command-parameters] (保留字大小写都无所谓 , 微软的系统一般都是这样) %variable 的变量名有且仅有一个字母 。
如果是在脚本文件中使用for语句 , 必须写成%%variable , 两个"%" set 指定一个或一组文件 。可以使用通配符 。
for /d。与目录名匹配(directory) , 没有"/d"则只有文件名被%variable迭代 , 如果都要 , 只好写两句话了 。
Sad for /r [[driver:]path]。
"/r"表示recursion , 包括了一下的所有子目录 , 后面[[driver:]path]参数指定起点 , 如果没有则表示当前目录 。for /l %variable in (start,step,end)。
"/l"表示list , 后面start,step,end都是数字 , 表示初值 , 步长和终值 , 比如打印1-100的命令 for /l %e in (1,1,100) @echo %e for /f ["options"] %e in (fileset)。. for /f ["options"] %e in ("string")。
. for /f ["options"] %e in ('command')。. (这里是平常的单引号!!!) 与linux下面的grep或者sed已经有点像了 , 有点行编辑的功能 。
表示把%e表示的文件打开读入缓冲 , 在缓冲中对每一行进行处理 , 把 token存入相应的变量 , 然后执行命令 , 继续下去直到所有文件都被处理过 。因为所有的处理都是在缓冲中 , 所以对原文件的内容没有任何影响 。
也可用来分析字符串或者命令行的输出 。options: eol=c,(end of line) , 指定一个符号 , 这个符号之后的文本会被当作注释 。
skip=n , 指定一个数字 , 处理的时候会略过开头的这么多行 。delims=xxx , 制定一批字符 , 代替空格和回车作为token与token之间的分隔符(delimits) tokens=x,y,m-n 第一个词语的标号为1 , 以此类推 , 后面%variable表示第一个词 , 拿%i来当例子 。
如果是写成tokens=1,2,3,4 , 那么%i表示第一个词 , %j表示第二个词 , %k表示第三个 , %l表示第四个 。这样写是不是很麻烦 , 于是你可以等价的写成1-4达到同样的效果 。
大家知道%variable因为只能取一个字母(微软做这种shell的解析真的很偷懒) , 所以最多你只能同时控制52个词 , 取为%A , 最后一个为%z 。最后在不加" , "的情况下使用 , 表示这行剩下所有的部分都是一个词 。
如果一开始就token= , 那么就是取一整行的内容 。usebackq (use back quotes , 使用反引号) , 为什么要使用反引号呢?因为(set)中的文件名可能会带有空格 , 这样的文件名需要用""括起来 , 但是 , 这样不是跟表示 string的语法冲突了吗?所以我们必须开启“使用反引号”的开关 , 开启之后 , ""中括起来的部分被当作文件名看待 。
而”(正常单引号)括起来的部分被当作字符串 , 最后“(反单引号)括起来的部分被当作命令 。for基本到这里 , 最后那一部分诸如"%~aI"没有看懂 , 达人帮忙领悟一下 , 帮助实在翻译得太烂 。
参数与shift %0表示命令自己的文字 。%1表示第一个参数 。
%9表示第九个参数 , 超过了9个怎么办?没有问题 , 我们可以使用shift 。
这10个参数就好像10个连续的观察点一样 。一旦shift , 就是右移 , 这样就%0变成了原来的%1 。