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

标签 vbscript arguments wsh

什么是 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/

相关文章:

使用非默认选项运行现有函数

windows - 如何从命令行设置时区?

csv - 如何使用 vb 脚本将文本文件中的 LF 转换为 CRLF?

excel - 使用 VBScript 将 xls/xlsx 文件(所有工作表)转换为 csv(以分号分隔)

Scala:如何设置在抽象父类(super class)构造函数中定义的实例字段?

python - 如何在 Python3 中添加带有标志的命令行参数?

javascript - 这个 javascript/WScript 启动器如何工作?

vbscript - 如何将带有空格和引号的命令作为单个参数传递给 CScript?

vba - 将 perl 脚本转换为 vba

asp.net - 如何为此 RC4 算法创建解密函数