核心方法
使用 Run
方法(适合简单命令)
Set objShell = CreateObject("WScript.Shell") ' 执行命令(0表示隐藏窗口,1表示显示窗口) returnCode = objShell.Run("cmd /c echo Hello World & pause", 1, True) WScript.Echo "返回代码:" & returnCode
- 参数说明:
cmd /c
:执行后关闭CMD窗口- 窗口模式:
0
(隐藏)、1
(显示)、2
(最小化) True
:等待命令执行完成(同步执行)
使用 Exec
方法(需获取输出结果)
Set objShell = CreateObject("WScript.Shell") Set objExec = objShell.Exec("cmd /c ipconfig /all") ' 实时读取输出 Do While Not objExec.StdOut.AtEndOfStream strOutput = objExec.StdOut.ReadLine() WScript.Echo strOutput Loop ' 获取错误信息 If Not objExec.StdErr.AtEndOfStream Then WScript.Echo "错误:" & objExec.StdErr.ReadAll() End If
关键技巧
-
路径处理(含空格时需加引号)
objShell.Run """C:\Program Files\App\test.bat""", 1, True
-
异步执行(不等待结果)
objShell.Run "notepad.exe", 0, False ' 立即继续后续脚本
-
管理员权限(需UAC确认)
If WScript.Arguments.Length = 0 Then Set objShell = CreateObject("Shell.Application") objShell.ShellExecute "wscript.exe", Chr(34) & WScript.ScriptFullName & Chr(34) & " RunAs", "", "runas", 1 WScript.Quit End If ' 此处写需提权的命令
常见问题解决
- 乱码问题:在CMD命令前添加
chcp 65001
切换UTF-8编码objShell.Exec("cmd /c chcp 65001>nul & ipconfig")
- 命令失效:特殊字符(如
>
、)需用转义符^
objShell.Run "cmd /c echo ^> test.txt", 0, True
- 窗口闪退:末尾添加
& pause
暂停objShell.Run "cmd /k echo 执行完毕 & pause", 1, True
安全建议
- 输入验证:避免直接执行用户输入的字符串
userInput = "malicious & format C:" ' 危险示例 ' 应过滤 & | > < 等特殊字符
- 权限最小化:非必要不使用管理员权限
- 错误处理:用
On Error Resume Next
捕获异常
引用说明:
本文方法基于Microsoft官方文档WScript.Shell对象和Windows命令参考,实际测试环境为Windows 10/11 + VBScript 5.8。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/5442.html