也许之前有人说过,刚发现,觉得蛮有意思的。- @if (0)==(0) echo off
- pushd %~dp0
- prompt ~#:
-
- (
- (for /l %%i in (1 1 9) do (echo,%%i))
- for /l %%i in (11 1 19) do (echo,%%i)
- ) | findstr /v "~#" | findstr /v "^$" | cscript -nologo -e:jscript %~s0 RegQuery .*7
-
- pause
- exit /b
- @end
-
- var strContent = "";
- strContent = WScript.StdIn.ReadAll();
- //WScript.Echo(strContent);
- //WScript.Quit();
-
- var fun = WScript.Arguments(0);
- switch (fun){
- case "RegQuery":
- var arg = WScript.Arguments(1);
- RegQuery(arg);
- break;
- default:;
- }
-
- function RegQuery(str) {
- var oReg = new RegExp(str, "g");
- while ( (rst = oReg.exec(strContent)) != null ) {
- WScript.Echo(rst);
- }
- }
复制代码 目前发现的两个坑:
1. 两个顺序的for放到语句块内,不重定向输出与重定向输出是两个结果。
直接输出结果:
重定向后输出的结果(线性的输出变成循环嵌套了):
解决的办法是在一个for循环就占用一个语句块(外面再套一对括号)
2. 若不作特殊处理,重定向后的结果还包括控制台信息(甚至在运行代码时不应看到的部分)。
还是拿上面的举例,直接输出结果:
不作处理重定向后输出的结果(坦诚相待,我怎么转的都告诉你了……):
解决办法通过组建特定的控制台回显格式+findstr屏蔽无意义回显。
这样for循环的结果可直接被用于类似cscript中的精细化处理。
测试平台 : WIN10 |