在vbs运行命令行工具后让命令窗口保持打开状态的脚本

问:
您好,脚本专家!如何在运行像 Ping 或 Ipconfig 这样的工具后让命令窗口保持打开状态?
-- DB
答:
您好,DB。这个问题让我们想起了往事。有一个脚本专家刚来 Microsoft,那时许多人认为 WMI 和 ADSI 对于脚本编写者来说太难使用。因此,人们建议这个脚本专家不使用 WMI 或 ADSI,而是干脆使用 VBScript 作为调用命令行工具的方法。事实上,这个脚本专家编写的第一章就是一个关于事件日志管理的章节,该章后来成为 Microsoft Windows 2000 脚本指南的一部分。它也是不含任何脚本编写代码之类内容的章节。
您说对了:只有脚本专家才会发现自己在编写一本绝对不含任何脚本编写代码的脚本编写指南。
当然,脚本专家们使用雄辩的说服,再配合大量的哀求,最终还是能够让人们相信,如果那个叫做 Microsoft Windows 2000 脚本指南的东西实际包含一两个脚本,也是可以的。不过,在此过程中,脚本专家们也对在脚本内调用命令行工具略有了解,这也是为什么我们能够回答您问题的原因。
我们猜测您有与以下类似的脚本,该脚本运行命令行工具 Ipconfig.exe:
Set objShell = CreateObject("Wscript.Shell")
objShell.Run("ipconfig /all")
您必定知道该脚本非常有效:弹出命令窗口,然后 Ipconfig 开始运行。唯一的问题是您还未来得及阅读 IPconfig 返回的信息,命令窗口就关闭了(除非您读得确实快)。这确实是个问题。
那么如何解决它呢?方法如下:
Set objShell = CreateObject("Wscript.Shell")
objShell.Run("%comspec% /k ipconfig /all")
如您所看到的,这个修订的脚本保留了与原来脚本相同的基本结构:我们创建 Wscript.Shell 对象的一个实例,然后调用 Run 方法以实际运行该命令行工具。区别在于调用该命令行工具的方式。在原来的脚本中,我们只是调用工具本身:
objShell.Run("ipconfig /all")
这一次,我们使用的语法大为不同:
objShell.Run("%comspec% /k ipconfig /all")
环境变量 %comspec% 代表 Windows 命令外壳;这等效于调用 Cmd.exe(它当然会打开一个命令窗口)。那为什么不直接调用 Cmd.exe?是这样,假设您的计算机运行 Windows 98。在这些计算机上,通过运行 Command.com 来调用命令外壳,因为没有 Cmd.exe。使用 %comspec% 有助于确保无论该脚本是在什么版本的 Windows 上运行,都可以获得命令窗口。
换句话说,使用此脚本时我们并不是直接运行 Ipconfig,而是运行命令外壳的实例,并向该实例传递几个参数。此类参数中的第一个是 /k,它指示命令外壳执行我们要求它完成的任务,然后保持打开状态。(我们得知 k 是 keep 的简写形式,像在“keep open”中那样,但我们不能肯定是否属实。)我们也可以使用参数 /c(c 代表 close),它在命令窗口完成任务时自动关闭命令窗口。 
传递给命令外壳的其它参数有何作用?那些参数只是运行 IPconfig 所需的命令:ipconfig /all。想要使用 Ping.exe 对 IP 地址 192.168.1.1 执行 ping 命令吗?以下脚本将执行该操作,并确保之后命令窗口保持打开状态:
Set objShell = CreateObject("Wscript.Shell")
objShell.Run("%comspec% /k ping 192.168.1.1")
想要运行 Net.exe 以获取本地用户帐户列表并可以随后进行查看吗?好的,没问题:
Set objShell = CreateObject("Wscript.Shell")
objShell.Run("%comspec% /k net user")
想要 ¨C 嗯,您已领会了要旨。
如果往往会在脚本中大量使用命令行工具(这并没什么不对;请尽管使用您认为最方便/最好的工具),则可能会对本专栏感兴趣,它向您介绍如何更改命令窗口标题和命令窗口颜色。过去了这么多年,脚本专家心中对调用命令行工具脚本的好感仍在,而且仍无法弄清楚为什么人们认为编写根本不含任何脚本的脚本编写指南是一个不错的想法。

时间: 2007-03-27

浅谈Vue-cli 命令行工具分析

Vue.js 提供一个官方命令行工具,可用于快速搭建大型单页应用.vue-webpack-boilerplate,官方定义为: full-featured Webpack setup with hot-reload, lint-on-save, unit testing & css extraction. 目录结构: ├── README.md ├── build │ ├── build.js │ ├── utils.js │ ├── vue-loader.conf.js │ ├── webpa

Nodejs 发布自己的npm包并制作成命令行工具的实例讲解

<span style="font-family:Arial, Helvetica, sans-serif;background-color:rgb(255,255,255);">近日当我在使用npm上已经存在的一个包时,发现它有bug:于是决定自己实现这个功能,自己写一个npm包.</span> 下面我记录一下自己的实现过程. 1. npm init 选择一个文件夹,然后用命令行cd进去,然后执行npm init,这时会生成一长串表单,根据自己的实际情况填写内

node命令行工具之实现项目工程自动初始化的标准流程

一.目的 传统的前端项目初始流程一般是这样: 可以看出,传统的初始化步骤,花费的时间并不少.而且,人工操作的情况下,总有改漏的情况出现.这个缺点有时很致命. 甚至有马大哈,没有更新项目仓库地址,导致提交代码到旧仓库,这就很尴尬了... 基于这些情况,编写命令行工具(CLI)的目的就很明确: 用于新项目工程的初始化利用工具进行初始化,可以节省项目初期的准备时间避免出现改漏的情况杜绝未更新项目版本仓库地址的问题 以下是新的流程示意图: 二.自动化流程分析 以下是自动化流程图: 从流程图可以得出两个重

使用sqlplus命令行工具为oracle创建用户和表空间

用Oracle10g自带的企业管理器或PL/SQL图形化的方法创建表空间和用户以及分配权限是相对比较简单的,本文要介绍的是另一种方法,使用Oracle 9i所带的命令行工具:SQLPLUS 来创建表空间,这个方法用起来更加简明快捷. 假设: 文章假设,如果您用的是Linux系统,那么Oracle用户名为oracle.同时,您是在oracle服务器上操作. 如果是在Windows系统下, 请先点击"开始",然后点"运行",输入cmd并点击"确定",

使用Python编写类UNIX系统的命令行工具的教程

引言 您是否能编写命令行工具?也许您可以,但您能编写出真正好用的命令行工具吗?本文讨论使用 Python 来创建一个强健的命令行工具,并带有内置的帮助菜单.错误处理和选项处理.由于一些奇怪的原因,很多人并不了解 Python? 的标准库具有制作功能极其强大的 *NIX 命令行工具所需的全部工具. 可以这样说,Python 是制作 *NIX 命令行工具的最佳语言,因为它依照"batteries-included"的哲学方式工作,并且强调提供可读性高的代码.但仅作为提醒,当您发现使用 Py

java自带命令行工具jmap、jhat与jinfo的使用实例代码详解

java自带命令行工具(jmap,jhat,jinfo) (1)JMAP 1.作用 打印进程,core文件,和远程进程的共享对象存储map或堆存储器的详细信息. 2.使用 jmap[options]pid jmap[options]executablecore jmap[options][pid]server-id@]remote-hostname-or-IP 如果指定的进程是在64位Java虚拟机(JVM)上运行,那么你可能需要指定-J-d64选项,例如:jmap -J-d64 -heap p

详解Node.js如何开发命令行工具

前言 Node 给前端开发带来了很大的改变,促进了前端开发的自动化,我们可以简化开发工作,然后利用各种工具包生成生产环境.如运行sass src/sass/main.scss dist/css/main.css即可编译 Sass 文件. 在实际的开发过程中,我们可能会有自己的特定需求, 那么我们得学会如何创建一个Node命令行工具. hello world 老规矩第一个程序为hello world.在工程中新建bin目录,在该目录下创建名为helper的文件,具体内容如下: #!/usr/bin

Node.js 使用命令行工具检查更新

随着 Node.js 的"走红",使用 Node.js 开发命令行工具越来越简单.一个成熟的命令行工具应该从一开始就要考虑好之后的版本更新如何"优雅"的告知用户.最好的方法当然是当用户在终端执行命令时,将相关信息提示给用户. 这篇文章将给出一个易用.高效.可定制的方法.源码在这里: GITHUB ,欢迎大家顺手点赞.接下来我将讲解其实现思路. 使用 我们先简单看看这个 npm 包的使用方法: const updater = require('pkg-updater'

使用命令行工具npm新创建一个vue项目的方法

Vue.js 提供一个官方命令行工具,可用于快速搭建大型单页应用.该工具提供开箱即用的构建工具配置,带来现代化的前端开发流程. 只需几分钟即可创建并启动一个带热重载.保存时静态检查以及可用于生产环境的构建配置的项目: # 全局安装 vue-cli $ npm install --global vue-cli # 创建一个基于 webpack 模板的新项目 $ vue init webpack my-project $ vue init webpack test //输入命令 ? Project