找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 19537|回复: 0

[其他] for循环结果重定向到cscript脚本的有趣现象

[复制链接]
发表于 2019-6-13 11:36:42 | 显示全部楼层 |阅读模式
也许之前有人说过,刚发现,觉得蛮有意思的。
  1. @if (0)==(0) echo off
  2. pushd %~dp0
  3. prompt ~#:

  4. (
  5. (for /l %%i in (1 1 9) do (echo,%%i))
  6. for /l %%i in (11 1 19) do (echo,%%i)
  7. ) | findstr /v "~#" | findstr /v "^$" | cscript -nologo -e:jscript %~s0 RegQuery .*7

  8. pause
  9. exit /b
  10. @end

  11. var strContent = "";
  12. strContent = WScript.StdIn.ReadAll();
  13. //WScript.Echo(strContent);
  14. //WScript.Quit();

  15. var fun = WScript.Arguments(0);
  16. switch (fun){
  17.         case "RegQuery":
  18.                 var arg = WScript.Arguments(1);
  19.                 RegQuery(arg);
  20.                 break;
  21.         default:;
  22. }

  23. function RegQuery(str) {
  24.         var oReg = new RegExp(str, "g");
  25.         while ( (rst = oReg.exec(strContent)) != null ) {
  26.                 WScript.Echo(rst);
  27.         }
  28. }
复制代码
目前发现的两个坑:
1. 两个顺序的for放到语句块内,不重定向输出与重定向输出是两个结果。
直接输出结果:

重定向后输出的结果(线性的输出变成循环嵌套了):

解决的办法是在一个for循环就占用一个语句块(外面再套一对括号)

2. 若不作特殊处理,重定向后的结果还包括控制台信息(甚至在运行代码时不应看到的部分)。
还是拿上面的举例,直接输出结果:

不作处理重定向后输出的结果(坦诚相待,我怎么转的都告诉你了……):

解决办法通过组建特定的控制台回显格式+findstr屏蔽无意义回显。

这样for循环的结果可直接被用于类似cscript中的精细化处理。

测试平台 : WIN10
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-21 03:29 , Processed in 0.030450 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表