标签: vbscript

VBScript中的ByRef和ByVal

我在VBScript中遇到了一些奇怪的事情.在编写我希望通过引用传递参数的过程时,调用此过程的方式会改变参数的传递方式!

这是一个例子:

Sub IncrementByRef(ByRef Value)
   Value = Value + 1
End Sub

Sub IncrementByVal(ByVal Value)
   Value = Value + 1
End Sub

Dim Num
Num = 10
WScript.Echo "Num : " & Num
IncrementByRef(Num) : WScript.Echo "IncrementByRef(Num) : " & Num
IncrementByRef Num  : WScript.Echo "IncrementByRef Num : " & Num
IncrementByVal(Num) : WScript.Echo "IncrementByVal(Num) : " & Num
IncrementByVal Num  : WScript.Echo "IncrementByVal Num : " & Num
Run Code Online (Sandbox Code Playgroud)

这是输出:

U:\>cscript //nologo byrefbyval.vbs
Num : 10
IncrementByRef(Num) : 10
IncrementByRef …
Run Code Online (Sandbox Code Playgroud)

vbscript

31
推荐指数
3
解决办法
4万
查看次数

比较值时使用NOT或<>更好吗?

在比较VBScript中的值时,使用NOT或使用<>是否更好?
这是:


If NOT value1 = value2 Then
Run Code Online (Sandbox Code Playgroud)

或这个:


If value1 <> value2 Then
Run Code Online (Sandbox Code Playgroud)

更好?

编辑:这是我的反驳.
在逻辑上否定布尔值时,您将使用NOT运算符,因此这是正确的:


 If NOT boolValue1 Then
Run Code Online (Sandbox Code Playgroud)

当在第一个例子的情况下进行比较时,返回一个布尔值.要么值等于True,要么它们不是False.因此,使用NOT运算符是合适的,因为您在逻辑上否定了布尔值.

为了便于阅读,将比较放在括号中可能会有所帮助.

vbscript

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

Visual Basic中的十六进制值

有人可以帮助我恢复思绪吗?

如何在Visual Basic 6/VBScript源中指定十六进制值?

这不是0x ABCD,因为它在C++中,这是我能记住的......它是类似的......但是什么?

vb6 vbscript asp-classic

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

如何在VBScript中生成GUID?

我想在VBScript中生成GUID字符串.我知道VBScript中没有用于生成一个的内置函数.我不想使用随机生成的GUID.也许有一个ActiveX对象可以使用CreateObject()创建,确保安装在可以生成GUID的(较新的)Windows版本上?

vbscript uuid guid

30
推荐指数
3
解决办法
4万
查看次数

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

从命令行使用VBScript从Excel外部运行Excel宏

我正在尝试从Excel文件外部运行Excel宏.我目前正在使用从命令行运行的".vbs"文件,但它一直告诉我无法找到宏.这是我正在尝试使用的脚本

Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open("test.xls")

objExcel.Application.Visible = True
objExcel.Workbooks.Add
objExcel.Cells(1, 1).Value = "Test value"

objExcel.Application.Run "Macro.TestMacro()"
objExcel.ActiveWorkbook.Close


objExcel.Application.Quit
WScript.Echo "Finished."
WScript.Quit
Run Code Online (Sandbox Code Playgroud)

这是我正在尝试访问的宏:

Sub TestMacro()
'first set a string which contains the path to the file you want to create.
'this example creates one and stores it in the root directory
MyFile = "C:\Users\username\Desktop\" & "TestResult.txt"
'set and open file for output
fnum = FreeFile()
Open MyFile For Output As fnum
'write project info and then a …
Run Code Online (Sandbox Code Playgroud)

vbscript excel command-line vba

30
推荐指数
3
解决办法
21万
查看次数

基准测试:python有更快的方式走网络文件夹吗?

我需要浏览一个包含大约一万个文件的文件夹.我的旧vbscript在处理这个问题时非常缓慢.从那时起我就开始使用Ruby和Python,我在三种脚本语言之间做了一个基准测试,看看哪种语言最适合这项工作.

以下测试的结果是共享网络上4500个文件的子集

Python: 106 seconds
Ruby: 5 seconds
Vbscript: 124 seconds
Run Code Online (Sandbox Code Playgroud)

Vbscript会是最慢的并不奇怪,但我无法解释Ruby和Python之间的区别.我对Python的测试不是最佳的吗?有没有更快的方法在Python中执行此操作?

thumbs.db的测试仅用于测试,实际上还有更多的测试要做.

我需要一些东西来检查路径上的每个文件,并且不会产生太多输出而不会干扰时序.结果每次运行都有点不同,但不是很多.

#python2.7.0
import os

def recurse(path):
  for (path, dirs, files) in os.walk(path):
    for file in files:
      if file.lower() == "thumbs.db":
        print (path+'/'+file)

if __name__ == '__main__':
  import timeit
  path = '//server/share/folder/'
  print(timeit.timeit('recurse("'+path+'")', setup="from __main__ import recurse", number=1))
Run Code Online (Sandbox Code Playgroud)
'vbscript5.7
set oFso = CreateObject("Scripting.FileSystemObject")
const path = "\\server\share\folder"
start = Timer
myLCfilename="thumbs.db"

sub recurse(folder)
  for each file in folder.Files
    if lCase(file.name) = myLCfilename then
      wscript.echo file
    end if
  next …
Run Code Online (Sandbox Code Playgroud)

ruby python vbscript benchmarking

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

无法在Windows 7 x64上使用VB脚本中的CreateObject

当我尝试在Windows 7(64位)计算机上的VB脚本中创建COM对象时,我总是会收到以下错误:

"ActiveX组件无法创建对象'xxx.xxx'.代码:800A01AD

我有应用程序使用COM对象没有任何问题.我试过在管理模式下运行命令行,没有区别.

有没有办法实现这个?

vbscript 64-bit windows-7 windows-7-x64

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

垃圾收集如何在JavaScript中运行?

垃圾收集如何在JavaScript中运行?它与.NET垃圾收集类似吗?是因为在VBScript中实现垃圾收集很糟糕,以至于人们避开垃圾收集并建立了对JavaScript作为标准客户端语言的偏好?

javascript vbscript garbage-collection

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

VBS中的CopyFile上的权限被拒绝

我正在尝试自动将文件推送到我的用户的主目录中,但是我被困在"权限被拒绝"错误上 - 在这里使用CopyFile调用抛出第6行.

脚本的其他部分(未显示)使用相同的源和目标目录创建和复制文件夹内容,并且它们完美地工作.只有当我使用CopyFile失败时才会这样.

Dim fso

Set fso = CreateObject("Scripting.FileSystemObject")

If Not fso.FileExists("H:\Minecraft\.minecraft\options.txt") Then
    fso.CopyFile "C:\Minecraft\options.txt", "H:\Minecraft\.minecraft\"
End If

Set fso = Nothing
Run Code Online (Sandbox Code Playgroud)

H: 是一个网络主目录,当前用户具有完全读/写权限.

我尝试添加/删除路径中的尾部斜杠,添加"options.txt"到目标路径,删除false参数...不确定还有什么要尝试.有什么想法吗?

谢谢!

仅供参考,在上面容易出错的位之前,这段代码每次都会完美地执行:

If Not fso.FolderExists("H:\Minecraft\.minecraft\bin\") Then
    If Not fso.FolderExists("H:\Minecraft\.minecraft\") Then
        fso.CreateFolder("H:\Minecraft\.minecraft\")
    End If
    fso.GetFolder("C:\Minecraft\bin\").Copy "H:\Minecraft\.minecraft\"
End If
Run Code Online (Sandbox Code Playgroud)

vbscript permission-denied file-copying

28
推荐指数
2
解决办法
9万
查看次数