批处理之家's Archiver

cjiabing 发表于 2012-3-19 00:27

FOR的新功能

[i=s] 本帖最后由 cjiabing 于 2012-3-19 01:33 编辑 [/i]

你可能没见过以下这个被“拆解”的FOR,它是那样熟悉而又陌生!~
下次你需要比较多的注释或显示内容时,不必在每行开头加Rem、::、echo了,使用一个FOR就可以实现注释了。
连分行显示都考虑了!~
.
[code]
@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

[/code]
思路来自错误的尝试:[url=http://www.bathome.net/thread-15748-1-1.html]http://www.bathome.net/thread-15748-1-1.html[/url]

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 呢…[code]if a==b (
   注释内容,不含特殊字符
)[/code]

qzwqzw 发表于 2012-3-21 11:28

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=104810&ptid=15931]5#[/url] [i]CrLf[/i] [/b]
果然就有人想到了这个多行注释
我自己曾设想过[code]
cd.||(
    多行注释内容
    多行注释内容
)2>nul
[/code]但是因为()对特殊字符的敏感而作罢

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

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

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

页: [1]

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.