标签: vbscript

在 VBscript 中使用 Empty 与 "" 定义或测试变量

将变量声明为空白时(例如在循环之前),有时会将其声明为“”或 Empty。另外,在检查值时,有时会与“(Not IsEmpty(variable))”和“variable <> Empty”一起使用。使用一种与另一种更好吗?以错误的方式使用它会导致任何问题吗?

例1:

  • 文件名日期 = 空
  • 文件名日期 = ""

例2:

  • 如果 (Not IsEmpty(fileNameDate)) 那么
  • 如果 fileNameDate <> 为空,则
  • 如果 fileNameDate <> "" 那么

谢谢!

- - - - - - 更新 - - - - - - -

请注意,我的问题并不是询问 Null、Empty 和 Nothing 之间的区别。我只是关注“空”部分以及它是否与写“”相同。在大多数情况下,我在互换两者时收到了类似的结果,但我不知道这是否只是我使用的示例。例如,以下内容让我有些困惑。

我的代码:

 Dim x, y, z

'Option1 (Do not set x to anything)

'Option2
'x = Empty

'Option3
'x = ""

If x = "" Then
'Action1
End if

If x = Empty Then
'Action2 …
Run Code Online (Sandbox Code Playgroud)

vbscript is-empty

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

VBS脚本等待返回

我们在 vbs 的帮助下启动 PowerShell 脚本以避免它生成的弹出窗口。这可以完美地工作,如下所示:

PS_Launcher.vbs

'run window totally hidden
Dim oSHELL
Set oSHELL = CreateObject("WScript.Shell")
oSHELL.CurrentDirectory = "C:\users\bob\AppData\Local\Temp"
oSHELL.Run "powershell.exe -ExecutionPolicy Bypass -NoLogo -File .\PS_Script.ps1", 0
Set oSHELL = Nothing
Run Code Online (Sandbox Code Playgroud)

唯一的问题是,当我们从计划任务中或从命令提示符 (CMD) 运行此命令时,它不会等待 PowerShell 脚本完成并立即返回提示符。

有没有办法让它等待 PowerShell 脚本完成后再继续?

我们已按照 中所述尝试了以下操作bWaitForReturn,但没有成功:

oSHELL.Run "powershell.exe -ExecutionPolicy Bypass -NoLogo -File .\PS_Script.ps1", 0, True
Run Code Online (Sandbox Code Playgroud)

PS_Script.ps1

Start-Sleep -Seconds 15

Get-WmiObject -Class Win32_MappedLogicalDisk |
    Select-Object Name, ProviderName |
    Export-Csv .\PS_Data.txt -NoTypeInformation
Run Code Online (Sandbox Code Playgroud)

vbscript powershell

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

vbs SendKeys 仅到特定窗口

我有这个VBScript

Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.SendKeys "KEYS TO SEND"
Run Code Online (Sandbox Code Playgroud)

此代码会将按键笔划发送到 Active Top 窗口

如何将击键仅发送到特定窗口?

vbscript

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

从cmd执行vbs命令而不保存vbs文件

当命令未保存时,如何从 cmd 运行 vbs 命令?

例如,要运行尚未保存的powershellpowershell "get-childitem"命令,可以简单地使用,其中get-childitem是我们要使用的命令。我们不需要保存 powershell 文件来运行该命令。

假设我们想要运行 vbs 命令Wscript.Echo Date()而不先保存 vbs 文件,我们该怎么做呢?

我不想从 .bat 文件执行此操作。我真的希望在 node.js 脚本中嵌入 vbs 脚本。我意识到这并没有在问题标题中得到充分体现:-/我想使用 exec 并嵌入 vbs。重要的是除了 js 之外没有其他文件。

如果我可以从 cmd 控制台运行 vbs 命令而不使用任何文件,那么我可以从 node.js 运行该命令而不需要任何其他文件。

我不认为是否可以在不使用临时文件的情况下在批处理文件中嵌入并执行 VBScript?回答这个问题,因为它涉及使用批处理文件。

在评论之后,看起来要走的路是使用mshta 我想做的是从 Node js 脚本访问 Windows 索引。Node Js 允许我执行命令行命令。所以我可以直接执行这个命令, powershell "$connector = new-object system.data.oledb.oledbdataadapter -argument \"SELECT System.ItemPathDisplay FROM SYSTEMINDEX WHERE CONTAINS (System.FileName, '\"\"Google Chrome\"\" OR Cefclient.exe')\", \"provider=search.collatordso;extended properties='application=windows';\"; $dataset = new-object …

vbscript cmd node.js

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

如果存在 &lt;!DOCTYPE html&gt; 标记,则在 VBScript 中的 DOM XML 解析器中加载 HTML 文档会失败

我目前正在尝试使用 VBScript 对 HTML 文件执行批量修改。为此,我使用 Microsoft.XMLDOM 对象。无法将我的 HTML 文件作为 XML 文档加载。经过一些实验,第一行的以下标签似乎是罪魁祸首:

<!DOCTYPE html>
Run Code Online (Sandbox Code Playgroud)

如果删除此行,我的脚本将按预期工作。如果包含此行,则不会加载。不会出现任何特定的错误消息,但尝试从 XMLDOM 对象中获取任何内容都不会返回任何内容,这与对象尝试加载的文件不存在时的行为相同。

有谁知道为什么会发生这种情况以及如何解决这个问题?我无法从我的文件中删除此标签,因为它们是 HTML 文档,并且通常由另一个应用程序重新生成。

这是我的代码示例:

strFilePath = WScript.Arguments(0)
strTitlePrefix = WScript.Argument(1)

Set objXMLDoc = CreateObject("Microsoft.XMLDOM")
objXMLDoc.Async = False

objXMLDoc.load(strFilePath)

Set objDoc = objXMLDoc.documentElement
Set objNodes = objDoc.selectNodes("//title")
For Each thisNode in objNodes
  OriginalTitle = thisNode.text
  NewTitle = TitlePrefix & OriginalTitle
  thisNode.text = NewTitle     
Next
Run Code Online (Sandbox Code Playgroud)

它在这一行失败:

Set objNodes = objDoc.selectNodes("//title")
Run Code Online (Sandbox Code Playgroud)

这是错误消息:

Microsoft VBScript runtime error: Object required: 'objDoc'
Run Code Online (Sandbox Code Playgroud)

如果我删除它尝试读取的文档顶部的标记,该代码就会执行我期望的操作,因此我知道问题在于该标记导致它认为该文件不是 XML 文档。

xml vbscript xmldom

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

vbscript正则表达式,两个字符串之间替换

我有这个xml:

<doc>
<ContactPrimaryEmail></ContactPrimaryEmail>
<ContactAlternateEmail></ContactAlternateEmail> 
<ContactPrimaryMobile>+00xxxxxx</ContactPrimaryMobile>
<ContactAlternateMobile></ContactAlternateMobile> 
</doc>
Run Code Online (Sandbox Code Playgroud)

我想在VBScript中应用正则表达式来替换属性ContactPrimaryMobile的内容+00xxxxxx ” ,只需更改数字:

<ContactPrimaryMobile>+00xxxxxx</ContactPrimaryMobile>
Run Code Online (Sandbox Code Playgroud)

我是 vbscripting 的新手,我创建对象和应用模式的技能有限,所以请您帮我转换此正则表达式以在 VBScript 中使用它:

(?<=\<ContactPrimaryMobile\>)(.*)(?=\<\/ContactPrimaryMobile)
Run Code Online (Sandbox Code Playgroud)

更新我得到这个:

对象不支持此属性或方法:“Submatches”

执行时:

Dim oRE, oMatches
Set oRE = New RegExp
oRE.Pattern = "<ContactPrimaryMobile>(.*?)</ContactPrimaryMobile>"
oRE.Global = True
Set oMatches = oRE.Execute("<doc><ContactPrimaryEmail></ContactPrimaryEmail><ContactAlternateEmail></ContactAlternateEmail><ContactPrimaryMobile>+00xxxxxx</ContactPrimaryMobile><ContactAlternateMobile></ContactAlternateMobile></doc>")
Wscript.Echo oMatches.Submatches(0)
Run Code Online (Sandbox Code Playgroud)

regex vbscript asp-classic

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

谁能帮我修复 Windows 10 上的 VBS 脚本,该脚本在电池电量不足时显示警告/MsgBox?

我想做的是编写一个脚本,当我的计算机电池电量降至 20% 时,该脚本会创建一个消息框/弹出窗口。我希望消息框仅出现一次\xe2\x80\x94,在单击“确定”后,它不应再次出现,除非我为计算机充电并让它再次耗尽 20%。

\n

问题是,当我的电池电量低于 20% 时,我的代码会导致消息框每隔几分钟出现一次。我的代码如下:

\n
set oLocator = CreateObject("WbemScripting.SWbemLocator")\nset oServices = oLocator.ConnectServer(".","root\\wmi")\nset oResults = oServices.ExecQuery("select * from batteryfullchargedcapacity")\n \nfor each oResult in oResults\n    iFull = oResult.FullChargedCapacity\nnext\n\nwhile (1) \n    set oResults = oServices.ExecQuery("select * from batterystatus")\n    for each oResult in oResults\n        iRemaining = oResult.RemainingCapacity\n        bCharging = oResult.Charging\n    next\n    iPercent = Round((iRemaining / iFull) * 100)\n    \n    if iRemaining and not bCharging and (iPercent < 21) and (iPercent > 10) Then msgbox "Your battery power is low (" …
Run Code Online (Sandbox Code Playgroud)

windows vbscript

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

我可以在单个HTA中混合使用VBScript和JScript吗?

是否可以在同一个HTA中同时使用JScript和VBScript?我可以从JScript调用VBScript函数,反之亦然吗?是否有任何"陷阱",如首先运行的JScript和运行第二的VBScript(经典ASP页面有此问题).

javascript vbscript hta

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

在vbscript中是否有与Java的HashSet相同的东西?

我必须在vbscript中写一些需要使用唯一集的东西.我正在寻找类似于Java的HashSet的东西,这已经在vbscript中了,还是我必须自己编写?

vbscript

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

当我的InstallShield安装程序尝试运行我的VBS自定义操作时,为什么会出现1720错误?

自定义操作配置如下:

自定义操作名称:MyCustomAction

VBScript文件名:<PathVar01>\MyFolder\MyVBSfile.vbs

ScriptFunction:MyFunction

返回处理:同步(检查退出代码)

脚本执行:立即执行

它通过以下InstallScript代码执行:

result = MsiDoAction(ISMSI_HANDLE,"MyCustomAction");
Run Code Online (Sandbox Code Playgroud)

当安装程序在InstallScript中到达该行时,安装程​​序会显示错误警告,说明:

"错误1720.此Windows Installer程序包存在问题.无法运行此安装所需的脚本.请与您的支持人员或程序包供应商联系."

MsiDoAction返回的结果代码是'1603',根据winerror.h,它是:

//
// MessageId: ERROR_INSTALL_FAILURE
//
// MessageText:
//
//  Fatal error during installation.
//
#define ERROR_INSTALL_FAILURE            1603L
Run Code Online (Sandbox Code Playgroud)

为什么会这样?我开始怀疑文件是否正确包含在内.然而,我指向正确的文件,我已经尝试通过InstallShield支持文件包含VBS,认为这将确保文件与设置一起出现,但结果相同.

vbscript windows-installer installshield

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