Board logo

标题: FOR的新功能 [打印本页]

作者: cjiabing    时间: 2012-3-19 00:27     标题: FOR的新功能

本帖最后由 cjiabing 于 2012-3-19 01:33 编辑

你可能没见过以下这个被“拆解”的FOR,它是那样熟悉而又陌生!~
下次你需要比较多的注释或显示内容时,不必在每行开头加Rem、::、echo了,使用一个FOR就可以实现注释了。
连分行显示都考虑了!~
.
  1. @echo off
  2. Rem ::by:cjiabing from:发布于批处理之家 http://www.bathome.net
  3. Rem 注意:DO后面的命令【echo;%%a】可以改成【Rem;%%a】从而实现注释,也可以改成【set var=%%a】进行赋值等。
  4. for /f "tokens=*" %%a in ("
  5. ^&echo. ^ ^ ^&echo.  ^  ^   ^  ^   ^  ^   ^  ^   ^  ^ FOR的新功能 ^&echo.  ^   ^&echo.^&echo. ^ ^
  6. 首先,这个FOR的功能正常,tokens和echo;%%a都能正常使用。
  7. 其次,在注释之前,【不需要】其他命令作为开头。
  8. 第三,本括号内,需要一对【双引号】将注释内容括住,一个双引号在开头,另外一个在最后一行内容的最后一个字符的后面。
  9. 第四,注释内容会拼接成一行。
  10. 第五,注释内单个%可以显示,但使用^^^&"()<>|"会奔溃。转义符和强力双引号可以包裹特殊字符。
  11. 第六,使用"^&echo;"可以显示分行。"
  12. ) do set var=%%a
  13. echo;%var%
  14. echo;
  15. pause
  16. echo;
  17. for /f "tokens=*" %%a in ('
  18. echo.^&Title FOR的新功能 ::by:cjiabing from:发布于批处理之家 http://www.bathome.net
  19. ^&echo;
  20. 首先,这个FOR的功能正常,tokens和echo;%%a都能正常使用。
  21. ^&echo;
  22. 其次,在注释之前,【需要一个echo;】命令作为开头。
  23. ^&echo;
  24. 第三,本括号内,需要一对【单引号】将注释内容括住。
  25. ^&echo;
  26. 第四,注释内容会拼接成一行。^&echo;
  27. 第五,注释内单个%可以显示,但使用^^^&"()<>|"会奔溃。转义符和强力双引号可以包裹特殊字符。
  28. ^&echo;
  29. 第六,使用"^&echo;"可以显示分行。
  30. ') do echo;%%a
  31. echo;
  32. 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 呢…
  1. if a==b (
  2.    注释内容,不含特殊字符
  3. )
复制代码

作者: qzwqzw    时间: 2012-3-21 11:28

回复 5# CrLf
果然就有人想到了这个多行注释
我自己曾设想过
  1. cd.||(
  2.     多行注释内容
  3.     多行注释内容
  4. )2>nul
复制代码
但是因为()对特殊字符的敏感而作罢

我们都知道rem和::对特殊字符的处理过程是不同的
rem 类似于“ 和 ^
但cmd仍然会解析其后的参数字符串
只不过特殊字符被转义了而已
所以在echo on时仍然会回显输出

而::是一个空标签
目前cmd对其处理的机制仍然不是很清楚
但我猜测它并没有对特殊字符进行转义
而只是跳过了特殊字符的处理而已

而对括号语句的处理
cmd采用了另外一套不同于rem的逻辑
所以暂时还没有办法替代
goto :注释结束 ... :注释结束
的用法




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2