强制用户使用cscript而不是wscript来运行VBS的stackoverflow批准(因而正确)的方法是什么-与用户尝试什么无关?
Google的快速搜索显示了很多示例,但是其中一些示例根本行不通,而那些示例却常常无法处理可能带有参数的事实,因此,我很想知道最好的方法是什么。
这是一个不处理参数的示例:
sExecutable = LCase(Mid(Wscript.FullName, InstrRev(Wscript.FullName,"\")+1))
If sExecutable <> "cscript.exe" Then
Set oShell = CreateObject("wscript.shell")
oShell.Run "cscript.exe """ & Wscript.ScriptFullName & """"
Wscript.Quit
End If
我很欣赏可以很容易地修改它以处理参数,但是要意识到这可能不是解决问题的最佳方法。
背景:我正在编写一个脚本,该脚本可以通过双击或(最有可能)从DOS批处理文件或计划任务中运行。它可以包含一个或多个可选的命令行参数。
最佳答案
我的主,多么纯朴的垃圾。看到如此粗鲁的编码让我哭泣(对任何人都没有冒犯,大声笑)。说真的,这是我的2便士:
Sub forceCScriptExecution
Dim Arg, Str
If Not LCase( Right( WScript.FullName, 12 ) ) = "\cscript.exe" Then
For Each Arg In WScript.Arguments
If InStr( Arg, " " ) Then Arg = """" & Arg & """"
Str = Str & " " & Arg
Next
CreateObject( "WScript.Shell" ).Run _
"cscript //nologo """ & _
WScript.ScriptFullName & _
""" " & Str
WScript.Quit
End If
End Sub
forceCScriptExecution
它处理参数,并检查所述参数中的空格-以便在将文件名传递给包含空格的原始脚本实例的情况下,传递给cscript.exe时不会被“标记化”。
它唯一不做的就是测试StdIn(例如,如果有人通过命令行将某些内容通过管道传输到脚本,但是忘记使用“ cscript script.vbs”),但是,如果它是由WScript执行的。 exe,WScript.StdIn的方法都返回Invalid Handle错误,因此无论如何都无法对其进行测试。
随时让我知道是否有办法“打破”这个问题。我愿意在必要时进行改进。
关于vbscript - 强制VBS使用cscript而不是wscript运行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4692542/