gpt4 book ai didi

vbscript - 强制 VBS 使用 cscript 而不是 wscript 运行

转载 作者:行者123 更新时间:2023-12-02 16:26:09 25 4
gpt4 key购买 nike

什么是 stackoverflow 批准的(因此正确的)方法来强制 VBS 使用 cscript 而不是 wscript 运行 - 无论用户尝试什么?

快速的谷歌搜索显示了大量的例子,但其中一些根本不起作用,而那些经常起作用的例子无法处理它可能是带有参数运行的事实,所以我很想知道什么是最好的方式是。

这是一个不处理参数的示例:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com