中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-17 15:57
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 在另外一个程序中将脚本以变量传给cscript执行? 查看 861 回复 4
楼 主 在另外一个程序中将脚本以变量传给cscript执行? 发表于 2009-12-19 11:46 ·  中国 天津 南开区 联通
新手上路
积分 15
发帖 9
注册 2008-08-23 09:30
UID 123935
性别 女
来自 Beijing
状态 离线
我们通过Cscript执行vbs时一般要用如下格式:

cscript  test.vbs


如果这个执行是从另外一个程序中调用的, 那么就必须把内容先写到test.vbs中。然后再执行上述代码。这样就引出一个问题:如果不希望别人看到test.vbs中的内容,那该怎么办?

假设写入test.vbs中的内容为Content. 可不可以在调用程序中以下面这种方式调用呢?


cscript Content


或者类似的方法。这样就可以保守Content中的密码了:-)

我试了不行啊。希望大家能帮我想想办法。;)
2 发表于 2009-12-19 14:09 ·  中国 天津 电信
高级用户
★★★
据说是李先生
积分 609
发帖 400
注册 2008-04-23 15:55
UID 116706
性别 男
状态 离线
cscript和wscript都只能执行一个文件,要执行一段脚本可以用mshta
┏━━━━━━┓
┃据说是李先生┃
┠──────┨
┃*ntRSS┃
┗━━━━━━┛
3 发表于 2009-12-20 10:37 ·  中国 天津 联通
新手上路
积分 15
发帖 9
注册 2008-08-23 09:30
UID 123935
性别 女
来自 Beijing
状态 离线
我记得mshta是执行hta格式文件的啊。既然它可以完成我说的功能,可否给出实际的实现方法。或举个例子啊?
4 发表于 2009-12-21 07:59 ·  中国 北京 朝阳区 联通
银牌会员
★★★★
[b]看你妹啊[/b]
积分 1,488
发帖 1,357
注册 2006-05-20 12:00
UID 55770
状态 离线
哎,自己搜索啊,真有这么难啊?

有问题请发论坛或者自行搜索,再短消息问我的统统是SB
5 发表于 2009-12-21 11:24 ·  中国 北京 中电华通通信有限公司
高级用户
★★★
据说是李先生
积分 609
发帖 400
注册 2008-04-23 15:55
UID 116706
性别 男
状态 离线
可以用如下的格式调用一句VBS脚本:

mshta vbscript:ONE_VBS_METHOD

因为 mshta 是执行 .hta 文件的,而 HTA 文件的本质就是 html 文档,因此能调用 html 文件中能够使用的脚本,但有些东西是被限制的,下面是一个在命令行窗口中执行的例子。

比如下面的一个脚本:

Set fso = CreateObject("Scripting.FileSystemObject")
temp = fso.GetSpecialFolder(2)
MsgBox "当前临时文件夹是 " & temp, 4160, "提示"


由于命令行只能是一行,所以需要把它搞成一行的格式,冒号在VBS中做分行功能:

Set fso = CreateObject("Scripting.FileSystemObject"):temp = fso.GetSpecialFolder(2):MsgBox "当前临时文件夹是 " & temp, 4160, "提示"


又因为 mshta 被作为一个命令执行,我们的脚本只是作为参数,并且 ONE_VBS_METHOD 就直接是运行的脚本,不能用引号,但是 mshta 又只接受冒号后面的第一个参数,即 ONE_VBS_METHOD 必须是一个没有分隔的语句,为了解决这个问题用 execute 或者 eval 包装一下,注意变成字符串后一个引号要换成两个:

Execute("Set fso = CreateObject(""Scripting.FileSystemObject""):temp = fso.GetSpecialFolder(2):MsgBox ""当前临时文件夹是 "" & temp, 4160, ""提示""")


上面的都是合法的VBScript脚本,可以保存为 .vbs 文件直接运行的。

于是得到下面一行命令,在CMD命令行界面执行:

mshta vbscript:Execute("Set fso = CreateObject(""Scripting.FileSystemObject""):temp = fso.GetSpecialFolder(2):MsgBox ""当前临时文件夹是 "" & temp, 4160, ""提示""")


但是运行之后发现残留一个 HTA 的窗口不自动关闭,因此一般再加上一个HTML中关闭窗口的代码,变成:

mshta vbscript:Execute("Set fso = CreateObject(""Scripting.FileSystemObject""):temp = fso.GetSpecialFolder(2):MsgBox ""当前临时文件夹是 "" & temp, 4160, ""提示"":Window.Close")



多余的话:
第一句,这个其实是运行在HTML中的脚本形式,因此还可以使用其他一些浏览器中的方法,实现脚本本身不具备的功能

mshta vbscript:Execute("x = Screen.Width:y = Screen.Height:Window.Alert ""当前显示器分辨率是 "" & x & ""×"" & y:Window.Close")


第二句,关于VBScript中的引号是个很纠结的问题,如果用JScript或者JavaScript就没这么麻烦了,因为 ' 和 " 效果相同,避免了转换时搞引号的问题,但是少了WScript、MsgBox等方便的东西

mshta javascript:eval("var fso = new ActiveXObject('Scripting.FileSystemObject');var temp = fso.GetSpecialFolder(2);window.alert('当前临时文件夹是 ' + temp);window.close()");


(不建议新手或者对大小写不敏感者使用JScript或者JavaScript!)
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
pgfj18 +1 2011-01-20 01:26
┏━━━━━━┓
┃据说是李先生┃
┠──────┨
┃*ntRSS┃
┗━━━━━━┛
论坛跳转: