VBSCRIPT 功能运行 shell 脚本来打开 CMD 并运行命令

问题描述 投票:0回答:1

VBScript 函数运行

Shell.run
,在
CMD
模式下打开
/k
并转到特定路径,例如。
C:\abcd
,然后运行
ipconfig
实用程序。

我在下面尝试过但没有成功-

Set Shell = CreateObject("WScript.Shell")
Shell.run "cmd /k cd C:\abcd" && "ipconfig"

错误 - 语法错误

cmd vbscript wscript.shell
1个回答
0
投票

我建议阅读 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
控制台窗口的数据。
    

© www.soinside.com 2019 - 2024. All rights reserved.