标题: FOR的新功能 [打印本页]
作者: cjiabing 时间: 2012-3-19 00:27 标题: FOR的新功能
本帖最后由 cjiabing 于 2012-3-19 01:33 编辑
你可能没见过以下这个被“拆解”的FOR,它是那样熟悉而又陌生!~
下次你需要比较多的注释或显示内容时,不必在每行开头加Rem、::、echo了,使用一个FOR就可以实现注释了。
连分行显示都考虑了!~
.
-
- @echo off
- Rem ::by:cjiabing from:发布于批处理之家 http://www.bathome.net
- Rem 注意:DO后面的命令【echo;%%a】可以改成【Rem;%%a】从而实现注释,也可以改成【set var=%%a】进行赋值等。
- for /f "tokens=*" %%a in ("
- ^&echo. ^ ^ ^&echo. ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ FOR的新功能 ^&echo. ^ ^&echo.^&echo. ^ ^
- 首先,这个FOR的功能正常,tokens和echo;%%a都能正常使用。
- 其次,在注释之前,【不需要】其他命令作为开头。
- 第三,本括号内,需要一对【双引号】将注释内容括住,一个双引号在开头,另外一个在最后一行内容的最后一个字符的后面。
- 第四,注释内容会拼接成一行。
- 第五,注释内单个%可以显示,但使用^^^&"()<>|"会奔溃。转义符和强力双引号可以包裹特殊字符。
- 第六,使用"^&echo;"可以显示分行。"
- ) do set var=%%a
- echo;%var%
- echo;
- pause
- echo;
- for /f "tokens=*" %%a in ('
- echo.^&Title FOR的新功能 ::by:cjiabing from:发布于批处理之家 http://www.bathome.net
- ^&echo;
- 首先,这个FOR的功能正常,tokens和echo;%%a都能正常使用。
- ^&echo;
- 其次,在注释之前,【需要一个echo;】命令作为开头。
- ^&echo;
- 第三,本括号内,需要一对【单引号】将注释内容括住。
- ^&echo;
- 第四,注释内容会拼接成一行。^&echo;
- 第五,注释内单个%可以显示,但使用^^^&"()<>|"会奔溃。转义符和强力双引号可以包裹特殊字符。
- ^&echo;
- 第六,使用"^&echo;"可以显示分行。
- ') do echo;%%a
- echo;
- pause
复制代码
思路来自错误的尝试:http://www.bathome.net/thread-15748-1-1.html
作者: cjiabing 时间: 2012-3-19 00:50
晕,论坛会自动消除空格,真麻烦了!~
其实把左右的空行消除了就可以,没必要把上下行的空行消除掉,否则代码连结构都看不见了!~
作者: powerbat 时间: 2012-3-19 21:01
可以玩赏,但真的没什么实用性。
作者: lllsoslll 时间: 2012-3-19 22:14
for /f %%a in ("....")do ...
双引号隔行的话很可能产生异常;和usebackq参数的bug很像,提示找不到文件。。。乱码。。
原因未明。。。
--------
至于甲兵的代码没有产生bug那只是特例,更改下就会有异常产生。。。
作者: CrLf 时间: 2012-3-21 06:38
话说可否用 if 呢…复制代码
作者: qzwqzw 时间: 2012-3-21 11:28
回复 5# CrLf
果然就有人想到了这个多行注释
我自己曾设想过- cd.||(
- 多行注释内容
- 多行注释内容
- )2>nul
复制代码
但是因为()对特殊字符的敏感而作罢
我们都知道rem和::对特殊字符的处理过程是不同的
rem 类似于“ 和 ^
但cmd仍然会解析其后的参数字符串
只不过特殊字符被转义了而已
所以在echo on时仍然会回显输出
而::是一个空标签
目前cmd对其处理的机制仍然不是很清楚
但我猜测它并没有对特殊字符进行转义
而只是跳过了特殊字符的处理而已
而对括号语句的处理
cmd采用了另外一套不同于rem的逻辑
所以暂时还没有办法替代
goto :注释结束 ... :注释结束
的用法
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |