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

时间:2014-04-15 04:01:22

标签: vbscript

我是VBScript的初学者。我google了它&我们知道我们可以通过执行以下命令从命令行运行VBScript:

例如,我的vbscript名称为Converter.vbs&它出现在文件夹D:\VBS中。

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

CScript "D:\VBS\Converter.vbs"

OR

WScript "D:\VBS\Converter.vbs"

现在,我想通过输入VBscript名称,即转换器,在没有 VBScriptCscript命令的情况下执行上面的Wscript

我不想指明VBSCRIPT EVERYTIME的全部路径。

任何人都可以指导我如何做到这一点吗?

5 个答案:

答案 0 :(得分:12)

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

第一部分,以避免输入" 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" %*

-OR -

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

如果上面已经定义了这两个,那么你的Windows'已经设置为知道如何启动* .vbs文件。 (BTW,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 "或" 帮助ftype "有关这些命令的其他信息,当您想要通过简单地键入具有特定扩展名的文件名来自动运行某些程序时,这些命令通常很方便。 (但要小心,因为某些文件扩展名是由Windows或您安装的程序专门设置的,因此它们可以正常运行。始终检查由assoc / ftype报告的当前分配的值,并将它们保存在某个文本文件中以防万一恢复他们。)

第二部分,避免在从控制台窗口输入命令时键入文件扩展名。了解Windows(和CMD.EXE程序)如何找到您键入的命令对此有用(以及部分。当您输入命令时,让我们使用" querty"作为示例命令,系统将首先尝试在其内部命令列表中找到命令(通过Windows'注册表中的系统本身设置,或者在CMD.EXE的情况下编程) 。由于没有这样的命令,它将尝试在当前%PATH%环境变量中找到该命令。在旧版本的DOS / Windows中,CMD.EXE(和/或COMMAND.COM)会自动添加文件扩展名" .bat"," .exe","。 COM"可能" .cmd"除非您明确键入了扩展名(例如" querty.bat"以避免运行" querty.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

请注意,扩展必须包含"。",由&#34 ;;"分隔,并且.VBS在AFTER .CMD之后列出,但是在BE之前.COM。这意味着如果命令处理器(CMD.EXE)找到多个匹配项,它将使用列出的第一个匹配项。也就是说,如果我有query.cmd,querty.vbs和querty.com,它将使用querty.cmd。

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

第三部分,让脚本无需始终输入完整路径即可运行。关于第二部分,这一部分自DOS时代就开始存在。只需确保该文件位于%PATH%环境变量中列出的目录(文件夹,对于Windows' folk!)中。我的建议是创建自己的目录来存储您创建或经常使用的各种文件和程序 从控制台窗口/命令提示符 即don&#39 ; t担心为从开始菜单或任何其他方法运行的程序执行此操作..仅限控制台窗口。不要弄乱Windows安装的程序或自动安装程序,除非您知道自己的内容是什么。重做)。

就个人而言,我总是创建一个" C:\ sys \ bat"批处理文件的目录," C:\ sys \ bin" * .exe和* .com文件的目录(例如,如果你下载类似" md5sum",MD5校验和实用程序)," C:\ sys \ wsh" VBScripts的目录(以及JScripts,名为" wsh"因为两者都是使用" Windows Scripting Host"或" wsh"程序)执行的,依此类推。然后我将这些添加到我的系统%PATH%变量(控制面板 - >高级系统设置 - >高级选项卡 - >环境变量按钮),这样Windows在我输入时总能找到它们。

组合所有三个部分将导致配置Windows系统,以便您可以在命令行命令中输入任何位置,只需键入它的基本文件名即可启动VBScript 。几乎任何文件类型/扩展名都可以这样做;正如您在我的%PATHEXT%输出中看到的那样,我的系统也设置为运行Perl脚本(.PLX; .PLW; .PL)和Python(.PY)脚本。 (我还把'#34; C:\ sys \ bat; C:\ sys \ scripts; C:\ sys \ wsh; C:\ sys \ bin"放在我的%PATH%的前面,然后放了各种各样的这些目录中的批处理文件,脚本文件等等,因此Windows总能找到它们。如果您想要"覆盖"某些命令:将* .bat文件放在路径的第一个位置,这也很方便例如,系统在* .exe文件之前找到它们,然后* .bat文件可以通过提供实际* .exe文件的完整路径来启动实际程序。查看"批处理中的各个站点文件编程"有关命令行功能的详细信息和其他示例..它还没有死!)

最后一点说明: 请查看其他一些网站,了解各种警告和警告。这个问题提出了一个名为" converter.vbs"的脚本,它危险地接近命令" convert.exe",这是一个从FAT文件系统转换硬盘的Windows程序到一个NTFS文件系统..如果你输入错误,可能会破坏你的硬盘驱动器!

另一方面,使用上述技巧,您也可以避免这些错误。以CONVERT.EXE为例。将其重命名为" REAL_CONVERT.EXE",然后创建一个类似" C:\ sys \ bat \ convert.bat"的文件。其中包含:

@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!

您还可以在现代Windows中使用CHOICE.EXE来使用户输入" y"或" n"如果他们真的想继续,等等..再次,批处理(和脚本)文件的力量!

这里有一些关于如何使用所有这些力量的一些好资源的链接:

http://ss64.com/

http://www.computerhope.com/batch.htm

http://commandwindows.com/batch.htm

http://www.robvanderwoude.com/batchfiles.php

这些网站大多数都面向批处理文件,但其中的大部分信息都适用于运行任何类型的批处理(* .bat)文件,命令(* .cmd)文件和脚本(* .vbs,* .js,* .pl,* .py等文件。

答案 1 :(得分:9)

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

可访问的信息
assoc | grep -i vbs
.vbs=VBSFile

ftype | grep -i vbs
VBSFile=%SystemRoot%\System32\CScript.exe "%1" %*

决定为脚本运行哪个程序。在我的情况下,它是cscript.exe,在你的内容中它将是wscript.exe - 这解释了为什么你的WScript.Echos导致MsgBoxes。

作为

cscript /?
Usage: CScript scriptname.extension [option...] [arguments...]

Options:
 //B         Batch mode: Suppresses script errors and prompts from displaying
 //D         Enable Active Debugging
 //E:engine  Use engine for executing script
 //H:CScript Changes the default script host to CScript.exe
 //H:WScript Changes the default script host to WScript.exe (default)
 //I         Interactive mode (default, opposite of //B)
 //Job:xxxx  Execute a WSF job
 //Logo      Display logo (default)
 //Nologo    Prevent logo display: No banner will be shown at execution time
 //S         Save current command line options for this user
 //T:nn      Time out in seconds:  Maximum time a script is permitted to run
 //X         Execute script in debugger
 //U         Use Unicode for redirected I/O from the console

显示,您可以使用// 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(将硬盘转换为洗衣机)。

更新评论:

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

  1. 将您的CONVERTER.VBS放入PATH环境变量中包含的文件夹中;然后,shell将搜索所有路径 - 如果需要考虑PATHEXT和ftype / assoc信息 - 以获得匹配的“可执行文件”。
  2. 将CONVERTER.BAT / .CMD放入包含cscript p:\ath\to\CONVERTER.VBS
  3. 之类的行的路径目录中

    两个的情况下,我会输出扩展名以避免(令人讨厌的)意外。

答案 2 :(得分:4)

为什么不直接在批处理/ vbscript文件混合中存储vbscript。命名批处理混合Converter.bat,您可以直接从cmd行执行它作为Converter。当然你可以默认所有脚本从Cscript或Wscript运行,但如果你想将你的vbs作为Windows脚本而不是控制台脚本执行,这可能会在以后引起一些混乱。因此,只需将代码设置为批处理文件并直接运行即可。

检查答案 - > Here

这是一个例子:

<强> Converter.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

答案 3 :(得分:4)

我想知道为什么你不能把它放在一个批处理文件中。例如:

cd D:\VBS\
WSCript Converter.vbs

将上述代码放入文本文件中,并以.bat扩展名保存文本文件。现在你必须简单地运行这个.bat文件。

答案 4 :(得分:1)

您可以按照以下步骤操作:

  • 打开您的CMD(命令提示符)
  • 键入'D:',然后按 Enter。 示例: C:\Users\[Your User Name]>D:
  • 键入“ CD VBS”,然后按 Enter。 示例: D:>CD VBS
  • 键入“ Converter.vbs”或“启动Converter.vbs”,然后按 Enter。 示例: D:\VBS>Converter.vbsD:\VBS>start Converter.vbs