[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
从以上测试可以看出
echo能够输出的最大字符数
不仅取决于echo命令的缓冲区
同时取决于cmd的词法分析缓冲区
以及其它各种临时缓冲区的长度
天的白色影子

TOP

本帖最后由 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
复制代码

TOP

这说明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

评分人数

    • CrLf: 原来如此技术 + 1
天的白色影子

TOP

回复 18# qzwqzw


    多谢了,getobject 一直不会用,w3school 中的解释语焉不详,还以为不重要...

TOP

不同系统之间的差异真讨厌,无论是XP还是Windows 7的CMD都是一次读入8191个字节,当命令超过8191个字节时,Windows 7会多次读取直到命令结束,但在echo输出之前又会截断为8191个字符;而XP则直接报错(纯属猜想,未验证)。

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

评分人数

    • CrLf: 应该是如此吧,纠结技术 + 1

TOP

关于GetObject楼主想的太多了
在保证可以稳定运行且又满足需求的前提下
什么方案都是可以选择的
不需要纠结于一些技术上的细节

而且GetObject多用于WMI和ADSI
也是一种经验之谈
没有什么太强的约束性
天的白色影子

TOP

返回列表