脚本与批处理合二为一

批处理是我们管理计算机和进行一些日常工作的好帮手,随着Windows的升级,批处理能做的事情越来越多。但是还是有很多事情我们无法用批处理来完成。好在后来微软在windows中加入了Windows Script Host,我们现在可以用JScript或VBScript来完成更复杂的工作,配合WMI,可以说是无所不能。WSH脚本用CScript.exe或WScript.exe来执行,CScript.exe和WScript.exe有一些参数,设置不同的参数对运行的结果可能会有影响。我就曾发现有的脚本在使用缺省解释器 (WScript.exe)和缺省参数不能得到我想要的结果。这样当我写好一个脚本给别人使用时还得大费口舌解释该用CScript.exe还是 WScript.exe运行,该配哪些参数。怎么解决这个问题呢?有一个方法: 另写一个批处理文件,用适当的方式来运行这个脚本。不过这样我就需要有两个文件。能不能只用一个文件呢?能!将脚本和批处理融为一体!,不但可以解决上述问题,还可以同时利用批处理和WSH各自的优势。
  思路是把批处理语句放在脚本的注释里。JScript可以用/* */将一段文字作为注释,所以我选择了JScript。但/* */在批处理中是非法字符,怎么才能将其引入而没有任何不需要的错误提示呢?

  我们需要一个批处理和JScript都接受的且没什么用的语句将/* 引入。JScript中有这样的语句 @set @varname=value,而批处理中也有: set varname=value, 批处理中可以在语句前面加个@,表示此句不输出。这就是我们需要的!至于*/很好办,用 @rem */即可。
  请看下面的代码(扩展名为bat),很简单。


代码如下:

  @set @this_call_started=1 /*
  @echo off
  @rem 允许CMD.EXE扩展功能
  @SETLOCAL ENABLEEXTENSIONS
  @rem 允许CMD.EXE延迟展开环境变量
  @SETLOCAL ENABLEDELAYEDEXPANSION
  ...
  批处理语句写在这里
  ...
  @rem "%~dpnx0" 扩展批处理文件自身的文件名为带完整路径的文件名
  @rem %* 批处理文件自身的所有参数
  @rem 重新将本文件作为脚本文件调用
  @call CScript.EXE "%~dpnx0" //Nologo //e:jscript %*
  ...
  批处理语句写在这里
  ...
  @goto end_this_call
  @rem */
  //Windows Script Start==================================================
  ...
  脚本语句写在这里
  ...
  //Windows Script end=====================================================
  /*
  :end_this_call
  ...
  批处理语句写在这里
  ...
  @set @this_call_started=
  @rem */

(0)

相关推荐

  • 脚本与批处理合二为一

    批处理是我们管理计算机和进行一些日常工作的好帮手,随着Windows的升级,批处理能做的事情越来越多.但是还是有很多事情我们无法用批处理来完成.好在后来微软在windows中加入了Windows Script Host,我们现在可以用JScript或VBScript来完成更复杂的工作,配合WMI,可以说是无所不能.WSH脚本用CScript.exe或WScript.exe来执行,CScript.exe和WScript.exe有一些参数,设置不同的参数对运行的结果可能会有影响.我就曾发现有的脚本在

  • 教你编写bat脚本Windows批处理

    目录 常见用途 bat命令速查 常用参数 echo 注释 Rem 使用::声明 dir :获取目录内容 > :将输出重定向到文件 变量 命令行参数 set命令 字符串 数值 局部变量 vs 全局变量 环境变量输出 字符串 创建 空字符串 字符串拼接 字符串长度 转int 截取 右对齐 删除字符串 删除两端(保留中间) 删除空格:= 替换 数组 创建 访问 修改 迭代 数组长度 结构体 if语句 if defined :变量是否存在 if exists:文件是否存在 if errorlevel:测

  • 自动生成批量执行SQL脚本的批处理实例演示

    场景: DBA那边给我导出了所有的存储.函数等等对象的创建脚本,有上千个文件. 现在需要将这些对象创建脚本导入到另外一个库,如何解决呢? 手动一个个执行显然不太现实. 于是手动写了一个批处理,将所有的文件形成一个.SQL的脚本,最后以@生成的.SQL脚本方式导入到目标库中. OS环境:WINDOWS xp 脚本内容如下: 复制代码 代码如下: @echo off if exist list.sql del list.sql /q :input cls set input=: set /p inp

  • 妙用脚本和批处理清除电脑中的痕迹

    我们知道,使用Windows操作系统在你打开文件.输入各种密码或用QQ与朋友聊天,都可能引发个人机密泄漏,都会在机器上留下踪迹.为安全起见,如果是在公用电脑上,你应该在离开时抹去这些操作后留下的痕迹,下面是可能的泄密点及解决办法. 一.可能的泄密点及其存在的位置 Windows中可能泄漏我们的秘密的地方有两处:一是存在于文件夹中,一是存在于注册表里. 1.文件夹中:在"开始"菜单中的"文档"中会显示我们浏览过的文件,如果它们暴露其中,将使我们的秘密不保,应将其删除.

  • sqlserver 脚本和批处理指令小结

    一.脚本基础     1.USE语句          设置当前数据库.     2.声明变量          语法:DECLARE @变量名 变量类型          在声明变量后,给变量赋值之前,变量的值为NULL.          将系统函数赋给声明的变量,这个方法可以使我们能更安全地使用值,该值只有人为地改变时它才变动.如果直接使用系统函数本身,那么当它发生变动时,有     时会无法确定其究竟为何,因为大多数系统函数值是由系统确定的.这容易在你不预期的情况下导致系统改变了值,引起

  • 使用脚本和批处理清除电脑中的痕迹的代码第1/2页

    一.可能的泄密点及其存在的位置 Windows中可能泄漏我们的秘密的地方有两处:一是存在于文件夹中,一是存在于注册表里. 1.文件夹中:在"开始"菜单中的"文档"中会显示我们浏览过的文件,如果它们暴露其中,将使我们的秘密不保,应将其删除."文档"中的内容安放在C:\Windows\Recent文件夹中:安装程序.编辑文件时产生的临时文件安放在c:\windows\temp文件夹中:删除文件时文件并没有被真正删除,保存在回收站中,回收站里的东西在C

  • Windows Powershell 执行文件和脚本

    象运行可执行文件一样,Powershell运行文件和脚本,也必须使用绝对路径或者相对路径,或者要运行的文件必须定义在可受信任的环境变量中. 关于脚本 脚本和批处理都属于伪可执行文件,它们只是包含了若干命令行解释器能够解释和执行的命令行代码. 执行批处理文件 批处理是扩展名为".bat"的文本文件,它可以包含任何cmd控制台能够处理的命令.当批处理文件被打开,Cmd控制台会逐行执行每条命令.那Powershell能够直接执行批处理吗? 将下列命令保存为ping.bat @echo off

  • 批处理 API实现文件下载的代码第1/2页

    作者:ZV(ZVROP) 目录: 一.写在前面的话 二.故事的起因 三.解决-腹稿 四.解决-实战 五.解决-打造 六.包装 七.小节 八.后记 九,参考文献 正文开始: 一.写在前面的话 这篇文档讲述的并不是什么新鲜的技术,我只是起到将他们混和起来实现了自己需要的功能的作用,如果你对批处理和PE格式相当了解,那我的这篇文档就权且当作浏览温习吧...^_^... 另外,由于我本人废话比较多,这也是不想给杂志写稿子的主要原因,给我干瘪瘪的3000字能讲出什么来,不如这样没有限制的爽快(当然也没什么

  • SQL Server使用脚本实现自动备份的思路详解

    因服务器安装的SQL Server版本不支持自动定时备份,需自行实现,大概思路为: 创建备份数据库的脚本 创建批处理脚本执行步骤一中的脚本 创建Windows定时任务执行步骤二中的脚本 1. 创建SQL脚本 新建db_backup.sql文件,填入以下内容. -- 定义需要备份的数据库 DECLARE @backupDatabase VARCHAR(20) = 'DB_NAME' -- 定义数据库备份文件存放的基础路径 DECLARE @backupBasePath VARCHAR(MAX) =

  • javaScript基础语法介绍

    简介 JavaScript是一种脚本语言. (脚本,一条条的文字命令.执行时由系统的一个解释器,将其一条条的翻译成机器可识别的指令,然后执行.常见的脚本:批处理脚本.T-SQL脚本.VBScript等.) HTML只是描述网页长相的标记语言,没有计算.判断能力,如果所有计算.判断(比如判断文本框是否为空.判断两次密码是否输入一致)都放到服务器端执行的话网页的话页面会非常慢.用起来也很难用,对服务器的压力也很大,因此要求能在浏览器中执行一些简单的运算.判断.JavaScript就是一种在浏览器端执

随机推荐