[ZT]胡搞瞎搞JScript记(用JScript代替批处理文件)
今天下午项目经理老蔡同志分配给我一个光荣任务,做一个批处理文件把某个文件夹下的.exe文件和所有子目录下的.exe文件复制到另外一个文件夹,并且不复制文件夹结构,也就是所有都放到目标目录下不分级。上网找了会资料没找着,后来在命令提示符下随便输入几个自己知道的命令看看帮助,发现XCopy很容易就可以实现复制指定目录下文件与所有子目录下文件到目标目录中,于是简单写了一段:
xcopy F:\A\*.exe F:\B\ /S
运行了下,好像可以哦~~于是就跟老蔡说OK啦!结果自己再测试下发现xcopy会把子目录结构也复制过去。。。。晕,那还不如自己复制粘贴呢。于是在命令行提示符窗口下又看了会xcopy的参数说明,就是找不到不复制目录结构的。。。
怎么办。。。还不如我写个C#程序来得快呢。。。可是要用这个程序的同事机器上好像没有.NET运行时啊,.NET运行时有时候就是很气人,关键时候经常发现对方没有装.NET运行环境,比如有时候要跟人家吹牛我做了什么好玩的,运行不了兴致都没了。
用C写吧,打开VS,建了个命令行项目,然后。。。。怎么写?忘记啦。。。写C语言已经是快3年前的事情了,获取目录和子目录我都不记得用什么函数了。上网找了会,各式各样都有,唉,真烦~~不用C写了。
想起昨天晚上翻旧电子书时看到《Windows脚本技术》里有讲到用JScript操作文件呢,于是赶快找出这本书。模仿里面的代码写了一段
var
fso, f1;
fso = new ActiveXObject( " Scripting.FileSystemObject " );
f1 = fso.GetFile( " c:\\test.txt " );
fso = new ActiveXObject( " Scripting.FileSystemObject " );
f1 = fso.GetFile( " c:\\test.txt " );
保存为.js文件, 双击,怎么又是用编辑器开了。。。右击,里面有个“在命令行中运行”,这个应该不是默认的吧,不管了,运行看看。结果啥也没有出现。。。
赶紧再看看书上怎么说,原来下一章才开始讲Windows脚本舍主,嘿嘿,还有一节叫:运行脚本,看来我太心急了,再继续看看。
原来可以做一个.wsf文件运行啊,而且还可以混合不同语言的脚本。。神奇啊。
里面有这样一段示例代码:
<
job
id
="IncludeExample"
>
< script language ="JScript" src ="FSO.JS" />
<script language="VBScript">
' 获得驱动器 C 的可用空间。
s = GetFreeSpace("c:")
WScript.Echo s
<sScript>
</job>
< script language ="JScript" src ="FSO.JS" />
<script language="VBScript">
' 获得驱动器 C 的可用空间。
s = GetFreeSpace("c:")
WScript.Echo s
<sScript>
</job>
于是我举一反三,自己做了一个,嘿嘿,经过一番调试,终于做了一个可以复制目录和子目录下所有.exe文件到指定目录的wsf文件,哈哈。
<
job
id
="IncludeExample"
>
< script language ="JScript" >
var file = "*.exe"; //要复制的文件
var des = "F:\\B"; //目标目录
var fso, f, fs, fc;
fso = new ActiveXObject("Scripting.FileSystemObject"); //文件系统控件
try
{
fso.CopyFile(file, des);
}
catch(ex)
{
}
f = fso.GetFolder(".\\");
fc = new Enumerator(f.SubFolders);
for ( ; !fc.atEnd(); fc.moveNext())
{
try
{
fso.CopyFile(fc.item().Path + "\\" + file, des);
}
catch(ex)
{
}
}
</ script >
</ job >
< script language ="JScript" >
var file = "*.exe"; //要复制的文件
var des = "F:\\B"; //目标目录
var fso, f, fs, fc;
fso = new ActiveXObject("Scripting.FileSystemObject"); //文件系统控件
try
{
fso.CopyFile(file, des);
}
catch(ex)
{
}
f = fso.GetFolder(".\\");
fc = new Enumerator(f.SubFolders);
for ( ; !fc.atEnd(); fc.moveNext())
{
try
{
fso.CopyFile(fc.item().Path + "\\" + file, des);
}
catch(ex)
{
}
}
</ script >
</ job >
复制一段《Windows脚本技术》中对WSF文件的定义:
Windows 脚本文件 (*.wsf) 是含有可扩展标记语言 (XML) 代码的文本文档。它综合了几个可增强脚本灵活性的功能。由于 Windows 脚本文件不是特定于引擎的,因此它们可包含与 Windows 脚本兼容的任何脚本引擎中的脚本。它们充当容器。
使用 .wsf 文件,可以在创建脚本时使用以下功能:
.wsf 文件支持 | 实现 |
---|---|
Include 语句 | 将函数从 VBScript 或 JScript 文件合并到 Windows 脚本宿主项目中。 |
多引擎 | 每个文件使用多种脚本语言。 |
类型库 | 将常数添加到代码中。 |
工具 | 使用任何 XML 编辑器编辑文件。 |
一个文件中的多项作业 | 将所有的代码存储在一个位置。 |