我在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中的值时,使用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运算符是合适的,因为您在逻辑上否定了布尔值.
为了便于阅读,将比较放在括号中可能会有所帮助.
有人可以帮助我恢复思绪吗?
如何在Visual Basic 6/VBScript源中指定十六进制值?
这不是0x ABCD,因为它在C++中,这是我能记住的......它是类似的......但是什么?
我想在VBScript中生成GUID字符串.我知道VBScript中没有用于生成一个的内置函数.我不想使用随机生成的GUID.也许有一个ActiveX对象可以使用CreateObject()创建,确保安装在可以生成GUID的(较新的)Windows版本上?
我正在尝试从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在处理这个问题时非常缓慢.从那时起我就开始使用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) 当我尝试在Windows 7(64位)计算机上的VB脚本中创建COM对象时,我总是会收到以下错误:
"ActiveX组件无法创建对象'xxx.xxx'.代码:800A01AD
我有应用程序使用COM对象没有任何问题.我试过在管理模式下运行命令行,没有区别.
有没有办法实现这个?
垃圾收集如何在JavaScript中运行?它与.NET垃圾收集类似吗?是因为在VBScript中实现垃圾收集很糟糕,以至于人们避开垃圾收集并建立了对JavaScript作为标准客户端语言的偏好?
我正在尝试自动将文件推送到我的用户的主目录中,但是我被困在"权限被拒绝"错误上 - 在这里使用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 ×10
64-bit ×1
asp-classic ×1
benchmarking ×1
command-line ×1
excel ×1
file-copying ×1
guid ×1
javascript ×1
python ×1
ruby ×1
uuid ×1
vb6 ×1
vba ×1
windows-7 ×1