中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 在另外一个程序中将脚本以变量传给cscript执行?
作者:
标题: 在另外一个程序中将脚本以变量传给cscript执行? 上一主题 | 下一主题
youtube2046
新手上路





积分 15
发帖 9
注册 2008-8-23
来自 Beijing
状态 离线
『楼 主』:  在另外一个程序中将脚本以变量传给cscript执行?

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

假设写入test.vbs中的内容为Content. 可不可以在调用程序中以下面这种方式调用呢?
cscript Content
或者类似的方法。这样就可以保守Content中的密码了:-)

我试了不行啊。希望大家能帮我想想办法。;)

2009-12-19 11:46
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
qinchun36
高级用户

据说是李先生


积分 609
发帖 400
注册 2008-4-23
状态 离线
『第 2 楼』:  

cscript和wscript都只能执行一个文件,要执行一段脚本可以用mshta



┏━━━━━━┓
┃据说是李先生┃
┠──────┨
┃*ntRSS┃
┗━━━━━━┛
2009-12-19 14:09
查看资料  发送邮件  发短消息 网志  OICQ (182484135)  编辑帖子  回复  引用回复
youtube2046
新手上路





积分 15
发帖 9
注册 2008-8-23
来自 Beijing
状态 离线
『第 3 楼』:  

我记得mshta是执行hta格式文件的啊。既然它可以完成我说的功能,可否给出实际的实现方法。或举个例子啊?

2009-12-20 10:37
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yishanju
银牌会员

[b]看你妹啊[/b]


积分 1488
发帖 1357
注册 2006-5-20
状态 离线
『第 4 楼』:  

哎,自己搜索啊,真有这么难啊?




有问题请发论坛或者自行搜索,再短消息问我的统统是SB
2009-12-21 07:59
查看资料  发短消息 网志   编辑帖子  回复  引用回复
qinchun36
高级用户

据说是李先生


积分 609
发帖 400
注册 2008-4-23
状态 离线
『第 5 楼』:  

可以用如下的格式调用一句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-1-20 01:26




┏━━━━━━┓
┃据说是李先生┃
┠──────┨
┃*ntRSS┃
┗━━━━━━┛
2009-12-21 11:24
查看资料  发送邮件  发短消息 网志  OICQ (182484135)  编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: