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

[其他] echo 最佳用法考

[复制链接]
发表于 2012-8-7 11:40:06 | 显示全部楼层
从以上测试可以看出
echo能够输出的最大字符数
不仅取决于echo命令的缓冲区
同时取决于cmd的词法分析缓冲区
以及其它各种临时缓冲区的长度
 楼主| 发表于 2012-8-7 15:29:39 | 显示全部楼层
本帖最后由 CrLf 于 2012-8-7 18:22 编辑

回复 14# Demon


    win7 下测试无误,可是我无法理解 win7 下为何能直接 echo 8191 个字符,按理说就算是 echo 空行也要至少需要五个字符,cmd 不是一次性读入 8192 字节的吗?那么在 win7 下为何能从脚本一次性读入至少 8196 个字符?   
    顺便向老兄请教两个疑问,本地 vbs 有没有办法操作现存的 IE 页面,就像操作用 IE.Navigate 打开的页面那样?第二个问题,本地 vbs 该怎么调用 htm dom 中的脚本函数?

回复 16# qzwqzw


    题外话:发现变量值的上限不是以往认为的 8190 字符,而是 8191...
  1. @echo off&setlocal enabledelayedexpansion
  2. for /l %%a in (1 1 12) do set a=!a!!a!a
  3. ::此时变量 a 的值长度为 4095

  4. set a=!a!!a:~1!
  5. echo !a:~8188!
  6. ::此时变量 a 长度为 8189,这是常见赋值办法下的极限

  7. set;=!a!;
  8. echo !;:~8188!
  9. ::使用 ; , 这两个分隔符作为变量名可以“偷”一个字符长度

  10. set[=!;![
  11. echo ![:~8188!
  12. ::使用 [ ] + \ . 作为变量名居然还可以再偷一个字符长度...

  13. pause
复制代码
发表于 2012-8-7 18:00:44 | 显示全部楼层
这说明win7的cmd的各种命令行缓冲区肯定有部分扩大了
只不过echo自己的缓冲区还是那么小而已

本地vbs操作本地html页面可以使用htmlfile对象
一个粗糙的示例

  1. set oDOM = GetObject("D:\页面.html", "htmlfile")
  2. Do Until oDOM.readyState="complete" : WScript.Sleep 200 : Loop
  3. WScript.echo  oDOM.getElementsByTagName("TD")(1).innerHTML
复制代码
set[充分说明cmd的词法分析与调度执行模块的协调存在缝隙

评分

参与人数 1技术 +1 收起 理由
CrLf + 1 原来如此

查看全部评分

 楼主| 发表于 2012-8-7 18:09:40 | 显示全部楼层
回复 18# qzwqzw


    多谢了,getobject 一直不会用,w3school 中的解释语焉不详,还以为不重要...
发表于 2012-8-8 10:20:41 | 显示全部楼层
不同系统之间的差异真讨厌,无论是XP还是Windows 7的CMD都是一次读入8191个字节,当命令超过8191个字节时,Windows 7会多次读取直到命令结束,但在echo输出之前又会截断为8191个字符;而XP则直接报错(纯属猜想,未验证)。

除了WMI和ADSI中还是少用GetObject的好。

评分

参与人数 1技术 +1 收起 理由
CrLf + 1 应该是如此吧,纠结

查看全部评分

发表于 2012-8-9 12:09:17 | 显示全部楼层
关于GetObject楼主想的太多了
在保证可以稳定运行且又满足需求的前提下
什么方案都是可以选择的
不需要纠结于一些技术上的细节

而且GetObject多用于WMI和ADSI
也是一种经验之谈
没有什么太强的约束性
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 19:42 , Processed in 0.028353 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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