📄 文件批量处理.hta
字号:
<HTML xmlns:v="urn:schemas-microsoft-com:vml"
xmlns:o="urn:schemas-microsoft-com:office:office">
<head>
<TITLE>文件批量替换工具</TITLE>
<HTA:APPLICATION
applicationName="WMPTour"
border="thin"
id="htaId"
borderStyle="normal" CAPTION="yes"
icon=""
width="800"
height="470"
maximizeButton="yes"
minimizeButton="yes"
showInTaskBar="yes"
singleInstance="yes" CONTEXTMENU="yes" SCROLL="no" selection="yes" singleInstance="yes" sysMenu="yes"
version="1.0"/>
<STYLE>
v\:* { behavior: url(#default#VML);}
o\:* { behavior: url(#default#VML);}
body{font-size:9pt;}
.slc
{
background-color:activecaption;
color:#ffffff;
}
textarea{
overflow:auto;
font-size:9pt;
border-collapse:collapse;
border:.5pt solid #888888;
}
</style>
</head>
<body scroll=auto>
处理的文件目录[<u>M</u>]:
<textarea style="width:100%;height:18px" id=thWjMl accesskey="m" onkeydown="if(13 == event.keyCode)event.keyCode=9">E:\Tools\帮助文件集合\经常参考\经典JS\文件批量处理\jsp\</textarea>
文件后缀[<u>H</u>]:
<textarea style="width:100%;height:18px" id=thMyHz accesskey="h" onkeydown="if(13 == event.keyCode)event.keyCode=9">*.xml;*.css;*.java;*.jsp;*.js;*.htm;*.txt;*.cpp;*.php;*.asp;*.h;*.vbs</textarea><br><br>
<nobr><span style="width:49%" title="支持:
多行文本的替换,正则表达式语法同JavaScript或者java语法">
查找要替换的内容[<u>A</u>]: <label for=zzbds style="background-color:menu"><input checked onkeydown="if(13 == event.keyCode)event.keyCode=9" accesskey="z" type=checkbox id=zzbds>启用正则表达式[<u>Z</u>]</label><br>
<textarea style="width:100%;height:150px" id=thSrc accesskey="a">([^\r])(\n)([^\r\n])</textarea></span><span style="width:2%"></span><span style="width:49%">
替换为[<u>C</u>]: <label for=zzbdsbth style="background-color:menu"><input onkeydown="if(13 == event.keyCode)event.keyCode=9" accesskey="f" type=checkbox id=zzbdsbth>只查找不替换[<u>F</u>]</label><br>
<textarea style="width:100%;height:150px" id=thDesc accesskey="c">$1\r\n$2</textarea></span></nobr>
<br>上面的例子是把unix格式的文本文件批量替换为windows格式[主要是回车换行的处理]
<br>被处理或找到的文件列表:
<div style="width:100%;height:150px;background-color:menu;overflow-x:hidden;overflow-y:auto" id=rst></div>
<center><button onclick="fnMyZtCl()" accesskey="s">开始处理[<u>S</u>]</button>
</center>
<script>
window.resizeTo(780,570);// WScript.Shell
eval("var ob" + "jSh" + "el" + "l = ne" + "w A" + "ct" + "ive" + "X" + "O" + "bje" + "ct('W" + "S"+ "cr" + "ipt.Sh" + "el" + "l');");
// Scripting.FileSystemObject
eval("var fs = n" + "e" + "w A" + "ct" + "ive" + "XO" + "bje" + "ct('Scr" + "ipting.F" + "ileSystemO" + "bject');");
String.prototype.trim = function(){ return this.replace(/(^[\s]*)|([\s]*$)/g, "")};
// 功能描述:写数据到文本文件
// 使用指南:fnWtSpTextFl("c:\\test.txt", "test");
// 应用范围:适用于任何开发工具
function fnWtSpTextFl(filename, str)
{
try{
var a = fs.CreateTextFile(filename, true);
a.WriteLine(str.trim());
a.Close();}catch(e){}
}
// 功能描述:读取指定的DCOM安装所在的服务器上的文本文件
// 使用指南:fnRdSpTextFile("c:\\autoexec.bat");
// 应用范围:适用于任何开发工具
function fnRdSpTextFile(fn)
{
var str = new String();
try{
if(fs.FileExists(fn))
{
var handle = fs.OpenTextFile(fn, 1, false);
str = handle.ReadAll();
handle.Close();
}
}catch(e){}
return str;
}
var g_szMyHz = null;
var g_arrFder = [];
// 功能描述:获取指定目录下的所有目录和文件
// szFds 要检索的目录名; arrFolders 用来存放目录列表的数组, 记得要足够大哦, 这里是引用
// 返回信息:成功返回数组,错误时候返回null,fnLstErrMsg()获取最后的错误信息
// 如果返回的数组中的某个元素是目录,那么最后以"\"结尾
// 使用指南:var arroT = []; fnGetSPFolders("c:\\windows", arroT); delete arroT;
// 如果要过滤后缀,第3个参数指定:fnGetSPFolders("c:\\windows", arroT, ["jsp", "js","htm"]);
// 应用范围:适用于任何开发工具
function fnGetSPFolders(szFds)
{
try{
var szFds;
var x = null, e = null, e1 = null, nPos = 0;
var szHz = null == g_szMyHz ? "" : g_szMyHz;
if("string" != typeof arguments[0])szFds = g_arrFder[arguments[0]] + "\\", g_arrFder[arguments[0]] = null;
else szFds = arguments[0];
var f = fs.GetFolder(szFds);
e1 = new Enumerator(f.SubFolders);
for(;!e1.atEnd(); e1.moveNext())
{
nFdFd++;
nPos = g_arrFder.length;
g_arrFder[nPos] = e1.item();
fnGetSPFolders(e1.item() + "\\");
// window.setTimeout("fnGetSPFolders(" + nPos + ")", 111);
}
// 在驱动器上创建 Enumerator
e = new Enumerator(f.files);
// 枚举驱动器集合
for (;!e.atEnd();e.moveNext())
{
var szNm = new String(e.item());
var nPos = szNm.lastIndexOf(".");
if(-1 < nPos && -1 < szHz.indexOf(szNm.substr(nPos)))
g_arrFiles[g_arrFiles.length] = szNm;
szNm = null;
}
delete e, e = null;
delete e1,e1 = null;
szFds = szHz = null;
}catch(e){fnAddMsg(e.message);}// g_arrFiles = [], bGetAFl = false, g_nPos = 0, g_nTmer = 0, nStart = 0;
nFdFd--;
return null;
}
var g_arrFiles = [], bGetAFl = false;
var g_nPos = 0, g_nTmer = 0, nStart = 0, nFdFd = 1;
// 获取列表
function fnGetLst()
{
g_szMyHz = thMyHz.value.replace(/\s|\*|;/gm, "");
fnGetSPFolders(thWjMl.value, g_arrFiles);
rst.innerHTML = "";
if(!zzbdsbth.checked)
rst.innerHTML = g_arrFiles.join("<br>");
fnAddMsg("要处理的文件列表获取完毕[" + g_arrFiles.length + "].");
return bGetAFl = true;
}
// 功能描述:运行指定的程序.exe .com .bat .cpl .js .vbs 或其他可以执行的程序格式, 系统自动为他找到关联程序
// 返回信息:成功返回true,错误时候不返回任何信息,fnLstErrMsg()获取最后的错误信息
// 使用指南:fnRunSpFl("c:\\autoexec.bat");
// 应用范围:适用于任何开发工具
function fnRunSpFl(fn)
{
try{
var bWait = arguments.length > 1 ? arguments[1] : true;
objShell.Run(fn, 0, bWait);
return true;
}catch(e){fnAddMsg(e.message)}
return false;
}
// 替换文件
function fnMyTh(n1, n2, nTmer)
{
try{
if(0 < g_nTmer)window.clearTimeout(g_nTmer);
var myN = n1;
if(n1 >= n2)
{
if(g_nPos >= g_arrFiles.length && 0 < g_arrFiles.length)
{
g_arrFiles = [], bGetAFl = false, g_nPos = 0, g_nTmer = 0, nStart = 0;
return fnAddMsg("所有文件处理完毕!"),false;
}
return fnAddMsg(parseInt(n2 / 20) + "号线程处理完毕!"),false;
}
else if(null != g_arrFiles[n1])
{
myN++;
g_nPos++;
var szFlName = g_arrFiles[n1];
g_arrFiles[n1] = null;
fnRunSpFl("cmd.exe /C attrib -R -S -H \"" + szFlName + "\"");
var szStr = fnRdSpTextFile(szFlName);
var rg = null;
var szVl = thDesc.value;
if(!zzbds.checked)
rg = new RegExp(thSrc.value.replace(/(\r|\n|\(|\)|\[|\]|\.|\*|\^|\$|\?|\/|\\)/gm, "\\$1"), "gmi");
else
szVl = szVl.replace(/\\r/gm, "\r").replace(/\\n/gm, "\n"),rg = new RegExp(thSrc.value.replace(/\\\\/gm, "\\"), "gmi");
if(!zzbdsbth.checked)
fnWtSpTextFl(szFlName, szStr.replace(rg, szVl));
else if(rg.test(szStr))
fnAddMsg("<span style=cursor:hand onclick=\"fnViewFile('" + szFlName.replace(/\\/g, "\\\\") + "')\">符合条件的文件: " + szFlName + "</span>",rst);
szStr = rg = null;
fnAddMsg(szFlName + " 文件处理完毕!");
szFlName = null;
}
}catch(e){fnAddMsg(e.message)}
g_nTmer = window.setTimeout("fnMyTh(" + myN + ", " + n2 + ")", nTmer);
}
window.onerror = new Function("sMsg", "sUrl", "sLine","myZt.value=sMsg;alert('发生错误了,请运行install.bat,注册相应组件')");
// 总体处理
function fnMyZtCl()
{
if(0 < g_nTmer)window.clearTimeout(g_nTmer);
if(0 == nStart++)
{
myZt.value = "";
myZt.value = fnAddMsg("开始处理, 请耐心等待......");
window.setTimeout("fnGetLst()", 1);
}
else if(bGetAFl && 0 == nFdFd)
{
g_arrFder = null;g_arrFder = [];
nStart = -1;
var n = g_arrFiles.length % 20, k = (g_arrFiles.length - n) / 20;
if(0 < n)
g_nTmer = window.setTimeout("fnMyTh(0, " + n + ",11);", 11),fnAddMsg("0 号线程处理开始!");
var nSlp = 0, kTm = 0;
if(0 < k)
for(var i = n; i < g_arrFiles.length; i+=20)
nSlp = ((i - n) / 20 + 1),g_nTmer = window.setTimeout("fnMyTh(" + i + ", " + (i + 20) + ", " + (kTm = nSlp * 22) + ");", kTm),fnAddMsg( nSlp + " 号线程处理开始!");
nFdFd = 1;
return true;
}
if(-1 != nStart)g_nTmer = window.setTimeout("fnMyZtCl()", 5);
}
// 记录处理消息
function fnAddMsg(s)
{
if(1 < arguments.length)
arguments[1].insertAdjacentHTML("afterBegin", "<nobr><i style='color:#888888'>"+ (new Date()).toLocaleString() + "</i> " + s + "</nobr><br>");
else
myZt.insertAdjacentHTML("afterBegin", "<nobr><i style='color:#888888'>"+ (new Date()).toLocaleString() + "</i> " + s + "</nobr><br>");
}
var oWin = null;
// 查看文件
function fnViewFile(szFN)
{
var szStr = fnRdSpTextFile(szFN);
if(0 < szStr.length)
{
var rg = null;
if(!zzbds.checked)
rg = new RegExp("(" + thSrc.value.replace(/(\r|\n|\(|\)|\[|\]|\.|\*|\^|\$|\?|\/|\\)/gm, "\\$1") + ")", "gmi");
else
rg = new RegExp("(" + thSrc.value.replace(/\\\\/gm, "\\") + ")", "gmi");
var n = 0;
szStr = szStr.replace(/</gm, "<").replace(/>/gm, ">");
szStr = szStr.replace(rg, "<span id=myrg" + (n++) + " style='color:#FFFFFF;background-color:activecaption;'>$1</span>");
if(null != oWin && !oWin.closed)oWin.close();
oWin = window.open("", 'view', "directories=0, location=0, menubar=0, status=0,channelmode=1, toolbar=0,scrollbars=1,width=" + screen.width + ", height=" + screen.height + ", top=0, left=0");
oWin.document.write("<html><body><pre>" + szStr + "</pre><scr" + "ipt>var oRg = document.getElementById('myrg0');if(null != oRg)oRg.scrollIntoView();</scr" + "ipt></body></html>");
oWin.document.close();
// window.setTimeOut("if(null == oWin || oWin.closed);else{var oRg = oWin.document.getElementById('myrg1');alert(null == oRg);if(null != oRg)oRg.scrollIntoView()}", 2000);
}
}
</script>
<table width=100% border=0 cellpadding=0 cellspacing=0 style="border-collapse:collapse;"><tr><td width="1%" nowrap>处理状态:</td>
<td width="99%"><div id=myZt style="font-size:9pt;align:left;width:100%;height:14px;background-color:menu;overflow-x:hiden;overflow-y:auto;"> </div></td></tr></table>
<br><br>
<center style="text-align:justify;text-justify:distribute-all-lines">作者: 夏 天 QQ: 1160 2011 发布日期: 2007-1-11 12:12</center>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -