标签: vbscript

WScript.Shell和阻塞执行?

我使用WScript自动执行某些任务,使用WScript.Shell调用外部程序.

但是,现在它不会等待外部程序完成,而是继续前进.这会导致问题,因为我有一些任务依赖于其他完成的任务.

我使用的代码如下:

ZipCommand = "7za.exe a -r -y " & ZipDest & BuildLabel & ".zip " & buildSourceDir

Set wshShell = WScript.CreateObject("Wscript.Shell")
wshShell.run ZipCommand
Run Code Online (Sandbox Code Playgroud)

有没有办法这样做,所以它阻塞,直到shell执行程序返回?

shell vbscript wsh

8
推荐指数
2
解决办法
1万
查看次数

如何使用vbscript(同步)调用Web服务?

实际上有很多例子,我使用过其中一个例子.但它是异步的,我的意思是它不等待我打电话完成的功能.

function ProcessSend() 
    Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP.4.0")
    Set oXMLDoc = CreateObject("MSXML2.DOMDocument")

    oXMLHTTP.onreadystatechange = getRef("HandleStateChange") 

    strEnvelope = "callNo="&callNo&"&exp="&exp

    call oXMLHTTP.open("POST","http://localhost:11883/ServiceCall.asmx/"&posFirm,true)
    call oXMLHTTP.setRequestHeader("Content-Type","application/x-www-form-urlencoded")


    call oXMLHTTP.send(strEnvelope)
end function

Sub HandleStateChange 
    if(oXMLHTTP.readyState = 4) then
        dim szResponse: szResponse = oXMLHTTP.responseText
        call oXMLDoc.loadXML(szResponse)
        if(oXMLDoc.parseError.errorCode <> 0) then
            'call msgbox("ERROR")
            response = oXMLHTTP.responseText&" "&oXMLDoc.parseError.reason
            'call msgbox(oXMLDoc.parseError.reason)
        else
            response = oXMLDoc.getElementsByTagName("string")(0).childNodes(0).text
        end if

    end if
End Sub
Run Code Online (Sandbox Code Playgroud)

我在一个javascript函数中调用ProcessSend函数.它连接到webservice,并返回"response"变量.但是我的javascript函数不会等待ProcessSend函数的结果.如何让它同步?

vbscript web-services xmlhttprequest synchronous

8
推荐指数
2
解决办法
5万
查看次数

更改FileSystemObject的当前目录

使用FileSystemObject时,您可以使用路径"."来引用运行脚本的目录.是否可以更改FileSystemObject认为当前目录的内容,以便您可以使用".".其他目录的路径语法?

例:

Set fso = CreateObject("Scripting.FileSystemObject")  
Set f1 = fso.GetFolder(".") ' Returns the current directory  
Set f2 = fso.GetFolder(".\backup") ' Returns the "backup" directory under the current directory
Run Code Online (Sandbox Code Playgroud)

作为简化示例,是否有一种方法来调用fso,以便fso.GetFolder(".")调用返回备份目录?

vbscript

8
推荐指数
1
解决办法
3万
查看次数

如何使用VBScript打开文件?

如何使用VBScript打开文件,就像用户双击该文件一样?

vbscript

8
推荐指数
1
解决办法
9万
查看次数

Unicode到UTF-8

我正在使用vbscript从db2中提取数据并写入文件.写入文件如:

Set objTextFile = objFSO.CreateTextFile(sFilePath, True, True)
Run Code Online (Sandbox Code Playgroud)

以unicode创建文件.但那是xml文件,它使用UTF-8.因此,当我用MS XML Notepad打开xml文件时,它会抛出错误:'十六进制值0x00是无效字符'

所以我用TextPad打开这个文本文件并保存为UTF-8.之后,XML打开没有任何问题.我可以通过vbScript将文件从Unicode转换为UTF-8吗?

unicode vbscript utf-8 character-encoding

8
推荐指数
1
解决办法
2万
查看次数

添加/删除程序在哪里为"已安装"列添加数据?

我正在使用VBScript复制Windows 7/8添加删除程序小程序.我已经让脚本包含所有正确的条目,但我无法让它包含Windows显示的所有正确的附加信息.

例如:Windows显示带有日期的"已安装"列.在某些情况下,它从相关的注册表键获取这些,如:

HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall\InstallDate
HKLM\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\InstallDate
HKUS\USER - SID\Software\Microsoft\Windows\CurrentVersion\Uninstall\InstallDate
Run Code Online (Sandbox Code Playgroud)

很少有键实际上具有InstallDate值,Windows总是填充此列.我设法从WMI中抓住了大部分缺失的日期:

 ("SELECT * FROM Win32_Product Where Description = " & "'" & strName & "'" & "")
for each objSoftware in colSoftware
Date = objSoftware.InstallDate
Run Code Online (Sandbox Code Playgroud)

这仅提供MSI安装的应用程序的日期.

我想也许Windows"猜到"基于Program Files/ProgramData文件日期的日期,但我尝试手动更改它们并没有反映在添加/删除中.我正在试图弄清楚Windows如何拉动这个日期.我注意到CCleaner可以重现添加/删除而不会出错,所以这些信息可以在某处获得.我只是筋疲力尽地寻找它.

windows vbscript wmi date addremoveprograms

8
推荐指数
1
解决办法
1万
查看次数

为什么VarType()总是为数组返回8204

VarTypeMSDN Microsoft文档中,VarType它说VBScript的功能(大胆强调):

"备注VarType函数永远不会返回Array的值.它总是被添加到一些其他值以指示特定类型的数组.Variant的值只有在已添加到Array的值时才返回VarType函数的参数是一个数组.例如,为整数数组返回的值计算为2 + 8192或8194.如果一个对象有一个默认属性,VarType(object)返回它的默认类型属性."

代码如

Dim A,I1, I2, I3
I1 = 1
I2 = 2
I3 = 3
A = Array(I1,I2,I3)

Dim A2
A2 = Split("Test,Test,Test",",")

AT = VarType(A)
AT2 = VarType(A2)
IT1 = VarType(I1)
IT2 = VarType(I2)
IT3 = VarType(I3)

WScript.Echo IT1
WScript.Echo IT2
WScript.Echo IT3
WScript.Echo AT & " - 8192 = " & AT - 8192
WScript.Echo AT2 & " - 8192 = " & AT2 - 8192
WScript.Echo …
Run Code Online (Sandbox Code Playgroud)

arrays vbscript

8
推荐指数
1
解决办法
8833
查看次数

VB.NET中的WScript?

这是我程序中的代码片段:

WSHShell = WScript.CreateObject("WScript.Shell")
Run Code Online (Sandbox Code Playgroud)

但由于某种原因,未声明"WScript".我知道这段代码在VBScript中有效但我正试图让它与vb.net一起工作.什么出错了?

vb.net vbscript wsh

7
推荐指数
1
解决办法
2万
查看次数

VBScript字典存在方法始终返回True

我究竟做错了什么?从我的测试中,objDic.exists永远不会给出错误!

    dim objDic

    set objDic = createobject("scripting.dictionary")

    objDic.add "test","I have not been deleted"

    wscript.echo objDic.item("test") 'Displays -- I have not been deleted

    objDic.remove "test"

    wscript.echo """" & objDic.item("test") & """" 'Displays -- ""

    if objDic.exists("test") then wscript.echo """" & objDic.item("test") & """" 'Displays -- ""
Run Code Online (Sandbox Code Playgroud)

vbscript dictionary exists

7
推荐指数
1
解决办法
3万
查看次数

如何使用vbscript检查文件是否存在

我有一个包含许多文件的文件夹.看起来像file1.txt,newFile1.txt,file2.txt,newFile2.txt,file3.txt,newFile3.txt,file4.txt,newFile4.txt,....

我有一个生成newFilei.txt的代码.我想写一个vbscript来检查这个文件夹中是否存在newFile.我试过这个

Set objFolder = FSO.GetFolder("C:\myFolder\")

For Each objFile In objFolder.Files 
        fileName=objFile.name 
    If instr(fileName,"newFile*") =1 Then
        WScript.Echo "new File exist"
    End If
Next 
Run Code Online (Sandbox Code Playgroud)

但这没用.有任何想法吗 ?

vbscript

7
推荐指数
1
解决办法
4万
查看次数