技术文章 > windows > WScript和CScript 

WScript 和 CScript

在linux环境下,日常使用 bash 或 cshell 处理一些简单的业务。
在 windows 系统下,满足此类需求的技术为 Windows Script Host(Windows脚本宿主,简称WSH)。 Windows 脚本宿主包括两个具体的工具:WScript.exe 和 CScript.exe 。
二者均可用于调试、执行WSH脚本,支持 vbs、js、wsf 3种文件格式。
二者最大的区别是:Wscript 是窗口模式运行,即图形界面;CScript 是命令行模式运行,即 cmd 窗口或 powershell 窗口字符界面。
可以在命令窗口输入 wscript /? 或 cscript /? 来查看更多的命令参数和运行方式。

cscript [/b] [/d] [/e:] [{/h:cscript | /h:wscript}] [/i] [/job:] [{/logo | /nologo}] [/s] [/t:] [x] [/u] [/?] []
指令各参数 官方说明 如下:
 
参数                     说明
/b                       批处理模式,该模式不显示警报、脚本错误和输入提示。默认模式是交互模式。
/d                       打开调试程序。
/e:engine                用指定的脚本引擎执行脚本。
/h:cscript		 将 cscript.exe 注册为运行脚本的默认脚本宿主。
/h:wscript		 将 wscript.exe 注册为运行脚本的默认脚本宿主。 默认值。
/i                       默认。交互模式;允许显示用户提示和脚本错误。与批处理模式相反。
/job:<identifier>        从 .wsf 文件运行指定的 identifier。
/logo                    默认。显示标题。与 nologo 相反。
/nologo                  防止在运行时显示执行标题。默认设置是 logo。
/s                       保存该用户的当前命令行选项。
/t:<seconds>             指定脚本可以运行的最长时间(以秒为单位)。 最多可以指定 32,767 秒。 默认无时间限制。该参数通过设置定时器来防止脚本执行过度。当执行时间超过指定值时,CScript 用 IActiveScript::InterruptThread 方法中断脚本引擎,并终止过程。
/u                       用于 Windows NT 和 Windows 2000,强制命令行以 Unicode 格式输出。CScript 无法决定以 Unicode 还是以 ANSI 输出;默认设置为 ANSI。
/x                       在调试程序中启动该程序。
/?    			 显示可用的命令参数并提供使用这些参数的帮助。 这与在没有参数和脚本的情况下键入 cscript.exe 相同。
			
通常的情况下,我们都是通过双击 VBS 脚本来直接运行脚本的,一般情况下这样做会是用 Wscript.exe 来执行脚本,当然这个双击后的默认行为我们是可以改变的。
有时候我们编写的一些脚本,例如一些有大量输出的脚本,我们会期望用 Cscript.exe 来执行,这样可以很方便地看到输出信息。
如果 WScript.exe 编写的脚本被 CScript 执行,或者反过来,为 CScript 编写的脚本调用了 WScript 执行,可能看不到希望的输出结果,或者导致一连串的弹出窗,不得不很麻烦地点击好多次“确定”按钮。
为了系统按照希望的方式调用 WScript.exe 或 CScript.exe ,编写脚本时可以强制要求系统使用 Cscript.exe 执行 或 强制用 Wscript.exe 执行。
示例一,强制用 Wscript.exe 执行:

SET Wshell=CreateObject("Wscript.Shell")

if lcase(right(Wscript.fullName,11)) = "cscript.exe" then 
	Wscript.echo "发现你丫竟然用 Cscript.exe 运行我?!,你太过分了!"
	Wshell.run "wscript.exe //nologo " & chr(34) & wscript.scriptfullname & chr(34)
	Wscript.quit
else
	Wscript.echo "现在是用 WScript.exe 来运行,做你想做的事!"
end if
			
示例二,强制用 Cscript.exe 执行:

SET Wshell=CreateObject("Wscript.Shell")

if lcase(right(Wscript.fullName,11)) = "wscript.exe" then 
	Wshell.Popup "发现你丫竟然用 Wscript.exe 运行我?!", 5, "你太过分了!", 48
	Wshell.run "cmd /k cscript.exe //nologo " & chr(34) & wscript.scriptfullname & chr(34)
	Wscript.quit
else
	Wscript.echo "现在是用 CScript.exe 来运行,做你想做的事!"
end if
			
如果你没有修改过默认的脚本执行引擎,那么默认情况下,双击 VBS 会是用 WScript.exe 来执行,所以你直接双击示例二,就会看到效果,弹出提示窗口后,5秒钟后对话框关闭,转到用 Cscript.exe 来执行,如果你在命令行上直接用 Cscript.exe 来执行,就不会有提示,直接执行 Else 部分。
同样的道理,如果你把示例一放在命令行上用 Cscript.exe 来执行,也会看到显示提示语后,转到用 Wscript.exe 来执行,而如果你直接双击,就只执行 Else 部分。


来源:摘自https://blog.csdn.net/weixin_42629671/article/details/113022872https://blog.csdn.net/suifenghuidong/article/details/37818897 本站 行痴 整理,2023-08-21