如何在没有Cscript/Wscript的情况下从命令行运行VBScript

如何在没有Cscript/Wscript的情况下从命令行运行VBScript,vbscript,Vbscript,我是VBScript的初学者。我在谷歌上搜索了一下,知道我们可以通过执行以下命令从命令行运行VBScript: 例如,我的vbscript名称是Converter.vbs&它位于文件夹D:\vbs中 我可以通过以下方法运行它: CScript "D:\VBS\Converter.vbs" 或 现在我想执行上面的VBScript而不使用Cscript或Wscript命令,只需键入VBScript名称,即转换器的名称 我不想每次都指定VBSCRIPT的完整路径 有人能告诉我怎么做吗?在命令行中输入

我是VBScript的初学者。我在谷歌上搜索了一下,知道我们可以通过执行以下命令从命令行运行VBScript:

例如,我的vbscript名称是
Converter.vbs
&它位于文件夹
D:\vbs

我可以通过以下方法运行它:

CScript "D:\VBS\Converter.vbs"

现在我想执行上面的
VBScript
而不使用
Cscript
Wscript
命令,只需键入VBScript名称,即转换器的名称

我不想每次都指定VBSCRIPT的完整路径


有人能告诉我怎么做吗?

在命令行中输入脚本的完整文件规范或文件名时,shell将通过

assoc | grep -i vbs
.vbs=VBSFile

ftype | grep -i vbs
VBSFile=%SystemRoot%\System32\CScript.exe "%1" %*
决定为脚本运行哪个程序。在我的例子中是cscript.exe,在你的例子中是wscript.exe-这解释了为什么你的wscript.Echos会产生MsgBoxes

作为

显示,您可以使用//E和//S将默认主机永久切换到cscript.exe

如果您非常懒惰,甚至不想键入扩展名,请确保PATHEXT环境变量

set | grep -i vbs
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.py;.pyw;.tcl;.PSC1
包含.VBS,路径中没有Converter.cmd(将硬盘转换为洗衣机)

更新wrt注释:

如果“不希望每次都指定我的vbscript的完整路径”,可以:

  • 将CONVERTER.VBS放入PATH环境变量中包含的文件夹中;然后,shell将搜索所有路径(如有必要,将PATHEXT和ftype/assoc信息考虑在内),以查找匹配的“可执行文件”
  • 将CONVERTER.BAT/.CMD放入路径目录,该目录包含一行,如
    cscript p:\ath\to\CONVERTER.VBS

  • 在这两种情况下,我都会键入扩展名以避免(令人讨厌的)意外情况。

    为什么不将vbscript保存在批处理/vbscript混合文件中呢。命名batch hybrid Converter.bat,您可以从cmd行直接将其作为转换器执行。当然,您可以将所有脚本默认为从Cscript或Wscript运行,但如果您希望将vbs作为windows脚本而不是控制台脚本执行,这可能会在以后造成一些混乱。因此,只需将代码设置为批处理文件并直接运行即可

    检查答案->

    下面是一个例子:

    转换器.bat

    ::' VBS/Batch Hybrid
    ::' --- Batch portion ---------
    rem^ &@echo off
    rem^ &call :'sub
    rem^ &exit /b
    
    :'sub
    rem^ &echo begin batch
    rem^ &cscript //nologo //e:vbscript "%~f0"
    rem^ &echo end batch
    rem^ &exit /b
    
    '----- VBS portion -----
    Dim tester
    tester = "Convert data here"
    Msgbox tester
    

    我将把它分解为几个不同的部分,因为每个部分都可以单独完成。(我看到了类似的答案,但我将在这里给出更详细的解释……)

    第一部分为了避免键入“CScript”(或“WScript”),您需要告诉Windows如何启动*.vbs脚本文件。在我的Windows 8中(我不能确定所有这些命令的工作方式都与旧Windows中所示的完全相同,但过程是相同的,即使您必须稍微更改命令),启动控制台窗口(也称为“命令提示符”,或称为[错误地]“dos提示符”),然后键入“assoc.vbs”。这将导致以下响应:

    C:\Windows\System32>assoc .vbs
    .vbs=VBSFile
    
    使用该选项,然后键入“ftype VBSFile”,这将导致以下响应:

    C:\Windows\System32>ftype VBSFile
    vbsfile="%SystemRoot%\System32\WScript.exe" "%1" %*
    
    -或-

    如果这两个文件的定义如上所述,则您的Windows已设置为知道如何启动*.vbs文件。(顺便说一句,WScript和CScript是同一个程序,使用不同的名称。WScript启动脚本就像启动GUI程序一样,CScript启动脚本就像启动命令行程序一样。有关这些详细信息和注意事项,请参阅其他网站和/或文档。)

    如果其中一个命令没有如上所述响应(或类似响应,如果assoc报告的文件类型和/或ftype报告的执行命令具有不同的名称或位置),您可以自己输入它们:

    C:\Windows\System32>assoc .vbs=VBSFile
    
    -和/或-

    C:\Windows\System32>ftype vbsfile="%SystemRoot%\System32\WScript.exe" "%1" %*
    
    您还可以键入“help assoc”或“help ftype”以获取有关这些命令的其他信息,当您只需键入具有特定扩展名的文件名即可自动运行某些程序时,这些命令通常非常方便。(但要小心,因为某些文件扩展名是由您可能已安装的Windows或程序专门设置的,因此它们可以正常运行。请始终检查assoc/ftype报告的当前指定值,并将其保存在某个文本文件中,以防您必须还原它们。)

    第二部分,从控制台窗口键入命令时避免键入文件扩展名。。了解Windows(和CMD.EXE程序)如何查找您键入的命令对于本部分(以及下一部分)非常有用。当您键入命令时,让我们使用“query”作为示例命令,系统将首先尝试在其内部命令列表中查找该命令(通过Windows注册表中针对系统本身的设置,或在CMD.EXE中编程)。由于没有此类命令,它将尝试在当前%PATH%环境变量中查找该命令。在旧版本的DOS/Windows中,CMD.EXE(和/或COMMAND.COM)会自动将文件扩展名“.bat”、“.EXE”、“.COM”以及可能的“.CMD”添加到您键入的命令名中,除非您显式键入扩展名(例如“query.bat”以避免错误地运行“query.EXE”)。在更现代的Windows中,它将尝试%PATHEXT%环境变量中列出的扩展。因此,您只需将.vbs添加到%PATHEXT%。例如,下面是我的%PATHEXT%:

    C:\Windows\System32>set pathext
    PATHEXT=.PLX;.PLW;.PL;.BAT;.CMD;.VBS;.COM;.EXE;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY
    
    请注意,扩展名必须包含“.”,以“;”分隔,.VBS列在.CMD之后,但在.COM之前。这意味着,如果命令处理器(CMD.EXE)找到多个匹配项,它将使用列出的第一个匹配项。也就是说,如果我有query.cmd、queryty.vbs和queryty.com,它将使用query.cmd

    现在,如果您想一直这样做而不必保持设置%PATHEXT%,则必须修改系统环境。在控制台窗口中键入它只会更改该控制台窗口会话的属性。我将把这个过程留给读者作为练习:-P

    Th
    C:\Windows\System32>assoc .vbs=VBSFile
    
    C:\Windows\System32>ftype vbsfile="%SystemRoot%\System32\WScript.exe" "%1" %*
    
    C:\Windows\System32>set pathext
    PATHEXT=.PLX;.PLW;.PL;.BAT;.CMD;.VBS;.COM;.EXE;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY
    
    @ECHO OFF
    ECHO !DANGER! !DANGER! !DANGER! !DANGER, WILL ROBINSON!
    
    ECHO This command will convert your hard drive to NTFS! DO YOU REALLY WANT TO DO THIS?!
    ECHO PRESS CONTROL-C TO ABORT, otherwise..
    
    REM "PAUSE" will pause the batch file with the message "Press any key to continue...",
    REM and also allow the user to press CONTROL-C which will prompt the user to abort or
    REM continue running the batch file.
    PAUSE
    
    ECHO Okay, if you're really determined to do this, type this command:
    ECHO.    %SystemRoot%\SYSTEM32\REAL_CONVERT.EXE
    ECHO to run the real CONVERT.EXE program. Have a nice day!
    
    cd D:\VBS\
    WSCript Converter.vbs