标签: vbscript

如何知道 CScript.exe 的 //E:engine 选项的有效脚本引擎名称?

当您通过 CScript.exe 执行扩展名为 .VBS、.JS 或 .WSF 的文件时,它们会正确执行:

CScript vbsProg.vbs
CScript jsProg.js
CScript wshScript.wsf
Run Code Online (Sandbox Code Playgroud)

但是,我们可以使用 //E:engine 选项来运行具有不同扩展名的 VBS 或 JScript 文件:

CScript //E:VBS vbsProg.txt
CScript //E:JScript jsProg.txt
Run Code Online (Sandbox Code Playgroud)

有什么方法可以对 WSF 文件执行相同的操作吗?

CScript //E:WhatGoesHere wshScript.txt
Run Code Online (Sandbox Code Playgroud)

是否有记录脚本引擎名称的地方?有没有办法知道所有已安装引擎的名称?

谢谢!

安东尼奥

vbscript wsh jscript

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

有关于 VBScript 正则表达式对象 (RegExp) 的好文档吗?

我们都知道每个正则表达式实现都有其自身的特点。我需要在使用 COM 自动化的应用程序中使用 Microsoft VBVScript RegExp 对象,但除了以下概述之外,我找不到合适的文档:

Microsoft 使用正则表达式增强 VBScript
http://msdn.microsoft.com/en-us/library/ms974570.aspx

MSDN 也包含正则表达式的这一部分,但它是针对 JavaScript 的:

正则表达式简介 (JavaScript)
http://msdn.microsoft.com/en-us/library/6wzad2b2.aspx

我们可以将本节中描述的所有功能用于 VBScript RegExp 对象吗?

regex documentation vbscript

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

在vbs中发送Windows键?

我到处找这个,真的有可能吗?如果您按 WIN + 向左箭头,它会将您选择的窗口安装到屏幕左侧,这正是我想要做的。

我试过这样的事情:

shl.sendkeys "#{LEFT}"
Run Code Online (Sandbox Code Playgroud)

因为我发现这#可能适用于 WIN,就像+适用于 Shift 和%Alt 一样。

这可能是一个愚蠢的问题,但它会帮助我很多。谢谢你的时间

vbscript

6
推荐指数
2
解决办法
3万
查看次数

带函数的调车场算法

我在这里发表的第一篇文章:)

我看到有很多关于调车场算法的问题,但我希望仍然有论坛成员有兴趣帮助我解决关于该算法的另一个问题。

我确实搜索了其他帖子,看看我的答案是否已经得到解答,并且我在其他论坛和互联网上做了一些研究:

http://stackoverflow.com/questions/16877546/modifying-the-shunting-yard-algorithm-c
http://www.computerhope.com/forum/index.php?topic=146535.0
http://en.wikipedia.org/wiki/Shunting-yard_algorithm
http://www.autoitscript.com/forum/topic/164627-shunting-yard-with-functions/
Run Code Online (Sandbox Code Playgroud)

我的代码是用 vb 脚本编写的,因为我喜欢它的简单性,而且我不了解 java 或 c 之类的语言。

我的问题:

目前该算法允许错误使用“(”和“)”示例:允许使用function((10,20,)30),但这显然不是调用函数的正确方法。

我也不确定我的代码是否正确编写,来自维基百科的伪代码是我的参考,但它不是很清楚:(

我还计划用 if-else 语句和嵌套循环之类的东西来扩展它,因为主要目标是用类似 VB 的语言编写某种解释器作为学习项目:)

我的代码[编辑]:

SET PRECEDENCE = CREATEOBJECT("SCRIPTING.DICTIONARY")
WITH PRECEDENCE
    .ADD "^",3
    .ADD "*",2
    .ADD "/",2
    .ADD "%",2
    .ADD "+",1
    .ADD "-",1
    .ADD "FUNCTION",0
    .ADD "(",0
    .ADD ",",0
    .ADD ")",0
END WITH

'#############################################################################
tokenArray = split("FUNCTION ( ( A , B ) , C )")
msgbox SHUNTINGYARD(tokenArray)
'#############################################################################

FUNCTION SHUNTINGYARD(INPUT)

    TOKEN_QUEUE = ARRAY()
    TOKEN_STACK = ARRAY()

    FOR TOKEN_NUMBER = …
Run Code Online (Sandbox Code Playgroud)

vbscript interpreter function shunting-yard

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

SQL 本机客户端数据类型兼容性 - 与 SQLOLEDB 不兼容

在切换到使用 SQL Native Client (SQLNCLI) 作为 ADO 提供程序时,我们的旧应用程序遇到了问题。

我们原来的连接字符串是:

Provider=SQLOLEDB; Server=host; Database=bob; Integrated Security=SSPI;
Run Code Online (Sandbox Code Playgroud)

我们将其更改为:

Provider=SQLNCLI11; Server=host; Database=bob; Integrated Security=SSPI; DataTypeCompatibility=80;
Run Code Online (Sandbox Code Playgroud)

我们发现,在调用存储过程时,使用 adDBTimeStamp 参数,Native Client 似乎将时间戳视为 smalldatetime,而不是 datetime。这给我们带来了问题,因为我们在某些比较中使用 9999 年 12 月 31 日作为“最高端”日期,而 Native Client 因“无效日期格式”错误而失败,而 SQLOLEDB 没有问题。

现在看起来我们可能只能在创建参数时将 adDBTimeStamp 更改为 adDate 作为数据类型,但是我想知道在我们继续进行代码更改之前,连接字符串中是否缺少某些内容。

VBScript 代码重现如下。为免生疑问,在有人建议我们应该使用 12/31/9999 之前,日期格式是 UK (dd/mm/yyyy) :-) 但还要确认一下,CDate 不会失败。

Set db = CreateObject("ADODB.Command")

' If Provider=SQLOLEDB then there is no error.
db.ActiveConnection = "Provider=SQLNCLI11; Server=host; Database=bob; Integrated Security=SSPI; DataTypeCompatibility=80;"
db.CommandText = "usp_FetchData"
db.CommandType = &H0004

' …
Run Code Online (Sandbox Code Playgroud)

vb6 vbscript ado sqlncli

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

ADODB.Parameters 错误 '800a0e7c' 参数对象定义不正确。提供了不一致或不完整的信息

我主要是一名 PHP 开发人员,但我有一些旧的 ASP,我们以前的开发人员之一弄坏了,我不知道如何修复它。我们有一个程序将一些变量发送到侦听器页面,该页面将这些数据与 msSQL 数据库的注册代码进行比较,然后让程序知道注册代码是否有效。

我收到以下错误

.Parameters.Append .CreateParameter("@code", adVarChar, 1, 50, x)
Run Code Online (Sandbox Code Playgroud)

是第 134 行:

ADODB.Parameters 错误“800a0e7c”

参数对象定义不正确。提供了不一致或不完整的信息。

/checkregistrationpro.asp,第 134 行

我已经在包含文件中指定了我未包含在代码中的任何命名常量,因此与此无关。

我的连接字符串(我已经验证这些设置是正确的):

set conn = Server.CreateObject("ADODB.Connection")
set cmd = Server.CreateObject("ADODB.Command")
sConnString = "Provider=sqloledb; Data Source=MYDATASOURCE; Initial Catalog=MYCATALOG; User ID=MYUSERID; Password='MYPASSWORD';"
conn.Open sConnString
Run Code Online (Sandbox Code Playgroud)

我的代码:

...

Function BlockInjectCode(StrVal)
    BlockInjectCode = Replace(StrVal,"--","")
    BlockInjectCode = Replace(BlockInjectCode,"'","")
    BlockInjectCode = Replace(BlockInjectCode,"""","")
    if instr(lcase(BlockInjectCode),"<") > 0 then
        BlockInjectCode = ""
    end if
End Function

    x = BlockInjectCode(Request.QueryString("rid"))
    uid = BlockInjectCode(Request.QueryString("uid"))
    chkcode = BlockInjectCode(Request.QueryString("Code"))
    CheckPro = …
Run Code Online (Sandbox Code Playgroud)

vbscript adodb dllimport asp-classic

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

AppActivate 并不总是激活应用程序窗口

所以我正在研究一些可以自动化 Internet Explorer 的 VBScript:打开它、导航并下载一个文件。我已经让它工作了,但是有一个问题在于我需要向它发送击键。SendKeys正在为我工​​作,但问题是当我习惯于AppActivate将焦点设置在 IE 上时,它并不总是有效。基本上可以分为以下两种情况:

案例 1:双击我的 .vbs 文件,自动化过程顺利进行。窗口被激活,一切正常。

情况 2:双击我的 .vbs 文件,其他一些应用程序会打开一个窃取焦点的窗口(或手动单击其他内容以更改焦点)。当AppActivate稍后执行该行时,IE 永远不会获得焦点并且击键显然不会通过。

那么你们对为什么AppActivate不设置焦点有什么想法吗?

这是我用来激活 IE 窗口的代码:

Do While Not wshell.AppActivate("Active Agents - Internet Explorer")
    WScript.Sleep(1)
Loop
Run Code Online (Sandbox Code Playgroud)

vbscript internet-explorer automation focus

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

使用 Stream_StringToBinary 进行 Base64 编码会插入换行符,从而破坏字符串?

也许我疯了,但看起来在 VB 中运行 Base64 的著名代码在第 73 个位置插入了一个换行符 (ascii 10),这随后使编码的字符串对于基本身份验证或其他任何与此相关的内容无效。

原始代码:

Function Stream_StringToBinary(Text)
  Const adTypeText = 2
  Const adTypeBinary = 1

  'Create Stream object
  Dim BinaryStream 'As New Stream
  Set BinaryStream = CreateObject("ADODB.Stream")

  'Specify stream type - we want To save text/string data.
  BinaryStream.Type = adTypeText

  'Specify charset For the source text (unicode) data.
  BinaryStream.CharSet = "us-ascii"

  'Open the stream And write text/string data To the object
  BinaryStream.Open
  BinaryStream.WriteText Text

  'Change stream type To binary
  BinaryStream.Position = 0
  BinaryStream.Type = adTypeBinary …
Run Code Online (Sandbox Code Playgroud)

vbscript base64 encoding

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

Windows-10 电池指示器 Visual Basic 脚本

我从互联网上获得了一些警告指示器的代码。我用它来在电池充电且电池电量高于 80% 时发出警告。

但我也想用它在电池电量低于 20% 时发出警告。我已经为这个 20% 警告添加了一行,但它不起作用。当电池电量高于 80% 时可以使用,但当电池电量低于 20% 时则无法使用。

我认为代码是 Visual Basic Sc​​ript (VBS) 中的。

请帮忙。

我已经在其他论坛和这个论坛上搜索过,但在任何地方都找不到这样的程序。

set oLocator = CreateObject("WbemScripting.SWbemLocator")
set oServices = oLocator.ConnectServer(".","root\wmi")
set oResults = oServices.ExecQuery("select * from batteryfullchargedcapacity")
for each oResult in oResults
   iFull = oResult.FullChargedCapacity
next

while (1)
  set oResults = oServices.ExecQuery("select * from batterystatus")
  for each oResult in oResults
    iRemaining = oResult.RemainingCapacity
    bCharging = oResult.Charging
  next
  iPercent = ((iRemaining / iFull) * 100) mod 100
  if bCharging and (iPercent > 80) …
Run Code Online (Sandbox Code Playgroud)

windows vbscript windows-10

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

有没有办法从批处理脚本中存储和检索文件中的密码?

@ECHO OFF
DFC.EXE get /isfrozen

IF Errorlevel 1 GOTO Frozen
IF Errorlevel 0 GOTO Thawed

:Frozen
Echo Errorlevel 1 Computer is Frozen, Thawing Now
DFC.EXE fakepassword123 /BOOTTHAWED
Echo
Goto END

:Thawed
Echo Errorlevel 0 Computer is Not Frozen
Echo
Goto END

:END
Exit
Run Code Online (Sandbox Code Playgroud)

我正在尝试运行一个非常简单的批处理文件,但如果有人要编辑密码,我不希望以纯文本形式存储密码。

现在 DFC.exe 密码行是存储密码的地方。

有没有办法将此密码隐藏在另一个文件中并从那里调用它?

windows vbscript powershell batch-file

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