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

[技术讨论] 漫话vbs学习感悟

vbs与com的关系:
     vbs是扳机,com 是你的子弹,没有com的vbs脚本,就是一把没有子弹的枪。
     枪没了子弹,杀人时,你就只有赤膊上阵了,当然赤膊上阵也是可以杀人的。



     扣动你的扳机,射出一幅美丽的图像
                 再次刷新网页,显示动画




欢迎跟帖。贴出你,我,他---
在vbs学习中的感悟,
对与错并不重要,重要的是大家在一起讨论,学习。
没有错误,何来正确!
在学习中一起成长,
在讨论中一起丰富我们对vbs的理解。
贴出你的感悟------------
让大家一起分享!

让我们一起从不同的角度去欣赏美丽的vbs吧
特别提醒:脚本尽量采用短脚本。代码不求完美,只要能说明一个问题就可以了。
=================================================

1--结束vbs的while...wend循环。
  1. t=1
  2. j=0
  3. while t<2
  4.   wscript.echo j&"--", t
  5.   j=j+1
  6.   if j>10 then t=2
  7. wend
复制代码
-------------------------------
vbs入门级教程 http://www.bathome.net/thread-11581-1-1.html
--------------------------
msgbox 的返回值 http://www.bathome.net/thread-11613-1-1.html
----------------------------
密码输入
http://www.bathome.net/thread-11595-1-1.html
------------------------------------------
cmd中输入的长脚本 http://www.bathome.net/thread-11589-1-1.html
-----------------------------------------
mshta标准用法
http://www.bathome.net/thread-11516-1-1.html

-----------------------------
创建环境变量
http://www.bathome.net/thread-11514-1-1.html


------------------------------
getref函数
http://www.bathome.net/thread-11484-1-1.html

------------------------------
连续截取文本 http://www.bathome.net/thread-11469-1-1.html
----------------------------------------------
关于regsvr32--- 脚本部件问题
http://www.bathome.net/thread-11386-1-1.html
------------------------------------------------------------------
创建vbs中的类:http://www.bathome.net/thread-11318-1-1.html
---------------------------------------------------------------------------
cmd的全屏问题
http://www.bathome.net/thread-11289-1-1.html

---------------------------------
正则表达式
http://www.bathome.net/thread-11223-1-1.html
------------------------------------------------
系统是winxp吗?
http://www.bathome.net/thread-11179-1-1.html
---------------------------------------------------
读出文本
http://www.bathome.net/thread-11165-1-1.html
----------------------------
wsh对象模型:一张经常看的图片,黄色的代表对象是有属性生成,这样的对象是集合对象。
访问的方法如下:
for  each  i in  set
  ......
next
=========================================
转帖 值得一看的vbs文章
http://www.hongkejidi.com/wz/ShowClass.asp?ClassID=337&page=1


大力推荐给玩家一个com:shotgraph画图组件,下面的test1.gif就是有这个组件做的,刷新网页,你可以看到运动的圆
语法请参考第2页下方。跳转到第2页http://www.bathome.net/thread-11615-2-1.html

下载http://aspxhome.com/article/uplo ... 200792612313895.rar
1

评分人数

本帖最后由 myzam 于 2011-3-27 12:01 编辑

vbs问题:
1. 如何在cmd中画出抛物线y=x*x   ?
2.如何从字符串 str="2011-11-30 12:50:33"
中提取年,月,日,时,分,秒?
3. 如何把数字 num=12345转化为 num=$12345.0000 ?
4.如果a.txt,b.txt被打开,如何聚焦到指定的文件如a.txt?
5. 已知字符串 str="z:\gg\ff\my.extend", 如何从str中提取:z,z:,my,extend,my.extend?
6.已知 p1="z:\gg\ff",p2="\rr\uu.txt",如何合并路径p1与p2?

TOP

本帖最后由 myzam 于 2011-3-27 17:12 编辑

2# myzam
假设f盘有一文件叫 20.txt其属性设置为只读且存档,
现在要用vbs显示这两个属性。方法如下:
  1. set fso=createobject("scripting.filesystemobject")
  2. set file=fso.getfile("f:\20.txt")
  3. t=file.attributes
  4. set dic=createobject("scripting.dictionary")
  5. dic.add 0,"normal"
  6. dic.add 1,"readonly"
  7. dic.add 2,"hide"
  8. dic.add 4,"system"
  9. dic.add 32,"achive"
  10. wscript.echo dic(t and 32),dic(t mod 32)
复制代码
---------------------------------
返回驱动器的文件系统
  1. set fso=createobject("scripting.filesystemobject")
  2. set file=fso.drives
  3. on error resume next ‘由于有光驱的存在,没有这句将返回驱动器没有准备好这一结果。
  4. for each i in file
  5. wscript.echo i.filesystem
  6. next
复制代码
resume单词的英文意思:假定,认定。
如假定x是大于2的数:Resuming x is greater than 2

题外话:如果是学数学的 用过专业的数学软件maple,那里面就有大量的 resume这个单词的用法。

--------------------------------------------------------------------------------------------
显示桌面文件有哪些?有多少。
  1. set obj=createobject("wscript.shell")
  2. set fso=createobject("scripting.filesystemobject")
  3. path=obj.specialfolders("desktop")  ‘获取桌面路径,可以直接输入
  4. set folder=fso.getfolder(path)
  5. set files=folder.files
  6. for each i in files
  7.     wscript.echo i.name ’获取文件名
  8. next
  9.    wscript.echo files.count  ‘获取文件数量
复制代码

TOP

新手学习一下吧。

TOP

和MSGBOX一样INPUTBOX的按钮也是很有意思的,确定和取消也代表了不同的含意(当然最好是有个变量接住这个输入值)
枫中残雪:风停了,我的心却在动,让我心中的寒意走向远方

TOP

5# wc726842270
对的。
刚开始接触msgbox时,点确定和取消按钮,效果都一样。
于是就想怎么做才可以让点击确定去执行a代码,点击取消就去执行b代码。
于是就 想 msgbox在运行后是不是有一个放回值。
这样就设计了下面的测试代码:
  1. t=msgbox("hello world",vbyesno,"我的测试")
  2.       wscript.echo t
复制代码
发现有放回值是6,7.

另外,bat中有很强的字符串截取功能。在vbs中也有,只是功能不那么强大。
下面几个fso对象的方法就具有字符串截取功能
getbasename
getdrivename
getextensionname
getfilename
getparentfoldername

p="k:\gg\uu\ha.abc"
set fso=createobject("scripting.filesystemobject")
wscript.echo fso.getdrivename(p)

-------------------------------------------显示驱动器类型
  1. set oshell=createobject("wscript.shell")
  2. set fso=createobject("scripting.filesystemobject")
  3. set drives=fso.drives
  4. for each i in drives
  5.   
  6.   if (i.drivetype mod 4)=0 then wscript.echo i&"It is CD"
  7.   if (i.drivetype mod 4)=1 then wscript.echo i&"It is flappy"
  8.   if (i.drivetype mod 4)=2 then wscript.echo i&"It is hard-disk"
  9. next
  10.    wscript.echo "Drives-count="&drives.count
复制代码
运行结果如下图

TOP

6# myzam


你学VBS的时候没有找几个教程看看?
这些基础知识在Script56.chm里面讲的很清楚啊。

Windows脚本技术(script56.chm)
http://bbs.bathome.net/thread-1985-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 myzam 于 2011-3-27 22:26 编辑

7# Batcher
怎么可能没看呢。我都看了几遍了。不知道为啥,参加vbs讨论的人那么少。我就是想把人气弄起来再说。有了人啥都好办嘛。

TOP

本帖最后由 wc726842270 于 2011-3-27 22:42 编辑

说的非常好,个人认为VBS是一个“高不成低不就”的脚本语言。刚接触不容易学,也没有像DOS一样走过一个时代(也就是后来的CMD。虽说不是,但是也是相通的)而VBS对语法,和英语还有更高的技术要有足够的了解(比如COM技术等)。虽然原因很多,但最直观的就是它不是主流。不过要是想学习技术的学习一下会是一个不错的选择。给大家一篇文章
http://www.jb51.net/article/14772.htm
枫中残雪:风停了,我的心却在动,让我心中的寒意走向远方

TOP

本帖最后由 myzam 于 2011-3-28 19:23 编辑

9# wc726842270


     我在大学里面学的是basic ,fortran。那时我没电脑。我印象最深刻的是我算一个数值积分,程序运行了近4分钟才算完,那时的电脑是TR-80机,真的好慢,还有一次我参加抽签考试,看的是编程打到三角,平时我都会的,到哪参加考试时紧张,直到时间要用完时才编号,好险。后来工作了有电脑了。弄了点dos。之后弄了点vb。后来别人告诉我,要牛逼就去学vc,而学delphi是
明智的选择,于是又去弄了弄delphi。结果是什么都没学好。在后来由去弄了下汇编。乱七八糟的弄了一大堆,到头来我是什么都没学好。
其实,说穿了还是工作中用不了多少。工作中能常用的就记的住。我在想,大学里面学的basic到现在我都还能记住,
更本原因是工作中,我有时要用来数值计算。其它的老是忘记,所以学好查手册我觉得是最好的办法。vbs越看越觉得是无底洞。
我都在想这个世界上有没有对vbs精通的人存在了。vbs的语法和20年前的basic语言差不多。但是是现在的vbs功能太强大,几乎是无所不能。
现在想想其实学什么语言都差不多。现在的高级语言都有共性。人的精力是有限的,专心一门语言就可以了。如果感觉精力旺盛,可以再去了解
一下其它的语言。
学编程其实也是不误正业,我觉得就和有的人喜欢打牌是一个道理。呵呵。
  现在的高级语言分为B,C,D(BASIC,C,DELPHI),这个世界上有没有人精通这三门语言的?真的不知道有没有。
微软的vb(vbs)是比较易懂的一门语言,感谢微软,它带着我们走进了现代的面向对象的编程。
所真的bat真的很古老,它不是面向对象的。如果只学bat那就意味着永远都停留在古代。我不是说古代就不好。
学bat之于,也学一点现代一点的高级语言。我想这是一种不错的选择。

TOP

本帖最后由 wc726842270 于 2011-3-28 21:32 编辑

用你的一句话来说"对与错并不重要"
重要的是为什么会是这个结果,也就是说过程,其实跟1L基本一个意思
我问个小问题
常见BAT通过MSHTA来调用VBS。那么能不能在VBS中用MSHTA来调用BAT呢?先思考一下,要说出为什么!!(思考交给别人)
PS:关于MSHTA的材料可不全啊,不过可以从宿主的角度着手
枫中残雪:风停了,我的心却在动,让我心中的寒意走向远方

TOP

10# myzam


还有就是,不能老在Windows里面转圈,还得了解一下UNIX里面的Shell、Perl等
^_^
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

11# wc726842270


我觉得可以。mshta是hta的宿主,专门用来解释hta文件的。而hta文件里面是可以嵌入脚本的,可以嵌入脚本就可以调用run(或exec)方法。而调用run就可以执行
bat文件。但我没试过。

TOP

13# myzam


        今天上网看写或读取剪切板的内容。方法真是很多。但看来看去,思路大致都是利用复制,粘贴去获得,写读剪切板的内容。真的是万紫千红。
有一种方法我觉得是不错的,一个网页文件里面可以嵌入文本框对象,而有文本框对象就可以进行复制与粘贴。这就隐含了读写剪切板。
     于是打开注册表在根键HKCU(这里注册的是classes=类),这是一个与类有关的键。网页中的按钮啊,文本框啊常这么写:
<form>
   <input type='text'/>
     <input type='button'/>
</form>
这里就在网页里面嵌入了一个窗体对象。所一我在HKCU键里搜索,就发现了一大堆与窗体有关的类,
如:forms.form.1,-forms.textbox.1,比照网页文件里面的窗体与文本框的关系,我想窗体是父类,文本框是子类,于是参考了其它的脚本,写下了下面的脚本,测试成功,离开了网页,文本框对象我们可以创建,但是你看不到。只有依附于网页等,你才可以显示出文本框!所以文本框的属性和网页中的是一样的。因为,你更本调用的就是网页中的那个文本框。
发到这里分享。
  1. set oform=createobject("forms.form.1") '创建窗体对象
  2. set  otextbox=oform.add("forms.textbox.1") '创建文本框对象
  3. otextbox.value="hello world"  '赋值给文本框
  4. otextbox.selstart=0
  5. otextbox.sellength=8 '以上两句是选择文本框里面的内容
  6. '如果你是用的是多行文本框,就加这样一句:otextbox.multiline=true
  7. otextbox.copy
  8. wscript.echo otextbox.textlength '显示一下我选中的文本长度。
复制代码
------------------------------------
读取剪切板内容 Clipboard Text  read by Textbox
  1. set oform=createobject("forms.form.1")
  2. set otextbox=oform.add("forms.textbox.1")
  3. otextbox.paste
  4. wscript.echo otextbox.value
  5. 'value属性和text属性的效果一样
复制代码
在理解上面的代码上,你想象中在进行html文件的编写。你在编写一个窗体,窗体里面有嵌入了一个文本框,这样代码就好理解了。


到这里我才发现原来网页中用的那些对象原来可以按照这样的方法脱离开网页而生存下去。
我还得测试一下能不能直接使用文本框对象,也就是说不创建窗体对象可以不?网页中是可以的。但是网页中是不是在隐含的使用文本框对象呢?
测试好了在贴。
经测试,发现不行,这说明如下的网友代码:
<input type='text'/>
虽然没有显示的创建窗体,但是html是在后台默默的创建了窗体的。


一点思考:不一定对。我猜测窗体com是按类似于如下的方式组织的:


<package>
   <component id='forms.form.1'>
       <public>
                      <method  name='add'>
              ...
       </public>
       <script language=vbs>
                  set  add=createcomponent("forms.textbox.1")

      </script>
   </component>
   <component id='forms.textbox.1'>
        <public>
             <method id='paste/'/>
              <method id='copy'/>

       </public>
        <script language=vbs>
              function paste
                     ....
             end function
               function copy
                     ....
             end function

         </script>
        ......
   </component>
     <component id='button'>
        ......
   </component>

</package>


---------------------------------------
所以vbs才会这样调用com

set  form=createobject("forms.fomr.1")
set textbox=form.add("forms.textbox.1")
。。。。。。
这样的嵌套结构就决定了,一定要先创建窗体form,然后才能调用textbox对象。

-------------------------------------------------
一个有趣的问题:
   set form=createobject("forms.form.1")
set textbox=form.add("forms.image.1")
textbox.picture=loadpicture("f:\sunset.jpg")
for i=1 to 5
   wscript.echo hex(textbox.picture)
next
按上面的方式运行结果是数字,这些数字代表什么呢?
---------------------------
我突然来了点灵感:
显示的数字是8位16进制,我认为前4为为line,后4位为column。代表图片的行列大小。
对于loadpicture的认识,有了一点认识。就是可以用来获取图片的高宽。
如:
  set t=loadpicture("f:\sunset.jpg")
   wscript.echo t.width,t.height
这个函数居然可以创建对象。好奇怪。但是这样得到的值和真实的快高不一样,图片是800x600,于是把获得的数字t.width除以800,得到了26.45875,
修改上面的程序
   set t=loadpicture("f:\sunset.jpg")
   wscript.echo int(t.width/26.45875),int(t.height/26.45875)
再运行,发现基本是
800x600,于是信心大增,把int该为round函数,居然对上号。于是有拿第二张图片测试,这次通过了。但是t返回的数值代表什么呢?还在思考中。
当然在网页中有图片框时这个函数的用法很简单,用法如名。

TOP

郁闷。
为啥学bat的人那么多。学vbs的那么少。
vbs无论从入门,到功能都比bat强很多。郁闷。
我想是不是因为vbs里面的英文太多了。

TOP

返回列表