|
关于启用变量延缓的详细解释,可以参考这个帖子:http://www.cn-dos.net/forum/viewthread.php?tid=20733&fpage=2。
findstr /n 打印了行数而你却没看到,是因为在 echo 的时候,就没让它显示出来,这与前面的设置及后面的 echo 语句有关系。假设你的 test.txt 中存在若干行信息,运行如下批处理代码来观察屏幕显示:
- @echo off
- findstr /n *. test.txt
- pause
复制代码
你看到了什么?是不是以 行号:行内容 的格式显示的?
回到你的疑问中来:for /f "tokens=1,2* delims=:" 这部分的含义是:以冒号为分隔符,提取第一、二个冒号前的内容及第二个冒号后的所有内容(不考虑几个冒号连用的情况),第一个冒号前的内容被 %%i 接收,第二个冒号前的内容被 %%j 接收,剩余的所有内容被 %%k 接收,%%j 和 %%k 分别被 tokens= 这个部分的 2 和 * 定义;findstr .* 中的点号表示任意非空字符,.*连用表示任意字符(包括空字符)。
转义字符的作用是取消某些符号的原有功能,把它们转化成一般的字符,主要为了处理重定向符号和管道符号。把这个功能用到其他场合,也会有意想不到的效果。比如,在命令行里,你运行 echo > 会提示你语法错误,运行 echo ^> 之后,就会在屏幕上显示字符 > 了,在这里,^ 把 重定向符号 > 转化成普通字符了。实际上,把所有要显示的内容之前加上^,都会显示原本的内容而不显示 ^。 |
|