VBScript 函数运行
Shell.run
,在 CMD
模式下打开 /k
并转到特定路径,例如。 C:\abcd
,然后运行 ipconfig
实用程序。
我在下面尝试过但没有成功-
Set Shell = CreateObject("WScript.Shell")
Shell.run "cmd /k cd C:\abcd" && "ipconfig"
错误 - 语法错误
我建议阅读 SS64 文档以了解 VBScript 命令:
还应该阅读有关 Windows 内核库函数 CreateProcess 的 Microsoft 文档,该函数由
.Run
调用,并且 cmd.exe
在找到仅用其文件名指定的可执行文件后调用 %SystemRoot%\System32\ipconfig.exe
的执行使用环境变量 PATH
和 PATHEXT
. 众所周知的路径和文件扩展名
打开一个 命令提示符 窗口,运行
cmd /?
并阅读输出用法帮助解释用于运行使用以下参数指定的命令行的选项 /K
也是一个好主意,然后 keep cmd.exe
正在运行以获取更多用户输入。
VBScript 文件可由 Windows Script Host 的 Windows
console版本
%SystemRoot%\System32\cscript.exe
或 Windows GUI版本
%SystemRoot%\System32\wscript.exe
进行解释。如果 explorer.exe
调用 CreateProcess
来运行 cscript.exe
来解释 .vbs
文件,则会打开一个控制台窗口。在 explorer.exe
调用 CreateProcess
运行 wscript.exe
来解释 .vbs
文件时,根本没有打开任何窗口。 explorer.exe
调用两个可执行文件中的哪一个来解释 VBScript 文件由用户配置。运行 cscript.exe /?
或 wscript.exe /?
并阅读控制台窗口或图形窗口中显示的输出帮助。
根本不需要运行 Windows 命令处理器
cmd.exe
,因为 Windows 脚本宿主 调用 CreateProcess
来运行 %SystemRoot%\System32\ipconfig.exe
或者 cmd.exe
调用 CreateProcess
来运行都没有关系这个可执行文件。
不清楚跑步的目的是什么
ipconfig.exe
。可以使用以下 VBScript 行来运行此可执行文件,根本无需打开窗口,也无需 Windows Script Host 等待启动的可执行文件的自我终止,这很可能是与 ipconfig.exe
不同的可执行文件的目标
最有可能是一个控制台应用程序,应该在后台运行而不打开控制台窗口。
Set objShell = CreateObject("WScript.Shell")
objShell.CurrentDirectory = "C:\abcd"
objShell.Run objShell.ExpandEnvironmentStrings("%SystemRoot%") & "\System32\ipconfig.exe", 0, False
在这种情况下会执行
%SystemRoot%\System32\ipconfig.exe
,其中 %SystemRoot%
已由 Windows 脚本宿主 展开,并以 C:\abcd
作为当前工作目录,因为 CreateProcess
是用 lpCurrentDirectory
的空指针调用的。当前工作目录由 ipconfig.exe
为 CreateProcess
设置为当前工作目录,因为它当前是为 VBScript 文件中的第二行设置的 Windows Script Host 进程设置的。
还可以使用:
Set objShell = CreateObject("WScript.Shell")
objShell.CurrentDirectory = "C:\abcd"
objShell.Run objShell.ExpandEnvironmentStrings("%SystemRoot%") & "\System32\cmd.exe /D /K " & objShell.ExpandEnvironmentStrings("%SystemRoot%") & "\System32\ipconfig.exe", 1, False
这行执行的是:
%SystemRoot%\System32\cmd.exe /D /K %SystemRoot%\System32\ipconfig.exe
这两个环境变量引用已由 Windows 脚本宿主 扩展。对于由
C:\abcd
设置的两个可执行文件,当前工作目录都是 CreateProcess
,首先由 Window Script Host 调用以使用参数 cmd.exe
运行 /D /K C:\WINDOWS\System32\ipconfig.exe
,然后由 cmd.exe
第二次调用以执行 C:\WINDOWS\System32\ipconfig.exe
没有任何争论。
在本例中,由于
CreateProcess
VBScript 命令的窗口样式参数值为 1
,因此通过 .Run
打开了一个控制台窗口。在输出数据以处理由 cmd.exe
在启动 ipconfig.exe
时创建的数据后,stdout
执行完成后,Windows 命令处理器
CreateProcess
继续运行,并通过 cmd.exe
将此句柄传递给进程
ipconfig.exe
获取最终显示在
CreateProcess
控制台窗口的数据。