FSO的强大功能
复制代码 代码如下:
<HTML> <HEAD> <TITLE>笨狼代码大管家</TITLE> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"><style> body { font-size:12; BACKGROUND: #DADADA; margin-left:5; } .folder { font-size:18; cursor:hand; } .folderIcon { color:navy; font-family:wingdings; font-size:18; cursor:hand; } .file { color:navy; font-size:18; cursor:hand; height:21; } .fileIcon { color:navy; font-family:wingdings; font-size:18; cursor:hand; height:21; display:inline; } input { width:20; overflow:visible; border:1px solid lightblue; background-color:#cccccc; cursor:text; } button { border:1px solid gray; width:60; margin-left:2; cursor:hand; font-size:12; filter:progid:DXImageTransform.Microsoft.Gradient(startColorStr='#eaeaff', endColorStr='#618fff', gradientType='0'); } textarea { font-family:Verdana; width:750; height:630; font-size:12px; overflow:scroll; } #frmTree { WIDTH:200px; height:630; MARGIN: 0px; PADDING: 0px; overflow:scroll; MARGIN-right:10; } #frmSeach { WIDTH:200px; height:630; MARGIN: 0px; PADDING: 0px; overflow:scroll; MARGIN-right:10; } #hide_control { POSITION: absolute; LEFT:213px; TOP:10px; WIDTH:10px; height:630; BACKGROUND: #DADADA; padding-top:300; cursor:e-resize; border:1 solid gray; } #txtFrm { POSITION: absolute; LEFT:230px; TOP:10px; WIDTH:100%; MARGIN: 0px; PADDING: 0px; BACKGROUND: #DADADA; } #tab1 { border:1 solid ; cursor:hand; } #tab2 { border:1 solid ; cursor:hand; BACKGROUND: gray; } #tab3 { border:1 solid; cursor:hand; BACKGROUND: gray; } #tab4 { border:1 solid ; cursor:hand; } </style> </HEAD> <BODY onselectstart="vbs:selectControl" onkeydown="vbs:shortCut"> <div id="frmTree" onclick="vbs:f_Click" onkeydown="vbs:deletFile" > <span id="tab1" > 目 录 </span> <span id="tab2" onclick="vbs:showMe frmSeach,frmTree"> 搜 索 </span> <hr/> <div id="tree" style='margin-left:0;color:navy;font-size:12;cursor:hand;' ></div> </div> <div id="frmSeach" onclick="vbs:f_Click" > <span id="tab3" onclick="vbs:showMe frmTree,frmSeach" > 目 录 </span> <span id="tab4"> 搜 索 </span> <hr/> <div id="list" style='margin-left:0' onkeydown="deletFile"> <input id="searchKey" style="width:100"/> <button onclick="vbs:seachFile" id="searchButton">查找</button><br/> <div id="seachList" style='margin-left:0' >搜索结果</div> </div> </div> <input type="button" id="hide_control" onmousedown="vbs:beginDrag" onmouseup="vbs:upHandler" bgcolor="#eeeeee"/> <div valign="top" id="txtFrm"> 标题:<input id="articleTitle" style="width:100" readonly/> <button id="browse" onclick="vbs:browseMe" >预览</button> <button id="saveButton" onclick="vbs:saveFile" >保存</button> <button id="browse" onclick="vbs:createFile" >新建</button> <button id="test" onclick="vbs:showHelp">说明</button> 行 <span id="Ln">1</span> <textarea id="txt" onkeydown='vbs:TabTxt' onclick="vbs:showLn"></textarea> </div> <SCRIPT LANGUAGE="vbscript"> '************************** '*****超级大笨狼*********** '************************** on error resume next window.resizeTo window.screen.availWidth,window.screen.availHeight window.moveTo 0,0 Set fso = CreateObject("Scripting.FileSystemObject") dim thisFileDir'定义本文件绝对路径 dim thisFileName'定义本文件名 dim thisFileFolder'定义本文件夹路径 thisFileDir = replace(window.location.href,"file:///","") thisFileDir = unescape(replace(thisFileDir,"/","\")) thisFileName = LastOne(thisFileDir,"\") thisFileFolder=getFolderDir(thisFileDir) tree.title = thisFileFolder dim currentDir'当前路径 dim currentFile'当前文件 dim currentDiv'当前DIV对象 dim currentSpan'当前Span对象 dim delatX dim dragAble:dragAble = false currentDir = thisFileFolder set currentDiv = tree tree.innerText = getTxtName(thisFileName) showMe frmTree,frmSeach showFolder tree sub showLn Ln.innerText = cint((window.event.offsetY-2)/15)+1 end sub sub shortCut if window.event.keyCode=83 and window.event.ctrlKey then if currentFile<>"" then saveFile window.event.cancelBubble = true window.event.returnValue = false end if if window.event.keyCode=66 and window.event.ctrlKey then browseMe window.event.cancelBubble = true window.event.returnValue = false end if if window.event.keyCode=78 and window.event.ctrlKey then createFile window.event.cancelBubble = true window.event.returnValue = false end if end sub sub browseMe dim win set win=window.open() win.document.write txt.value end sub sub createFile '点创建按钮,真的创建了. if vartype(currentSpan)<>0 then currentSpan.style.color = "navy" if currentDir ="" then '如果点到了文件 currentDir=getFolderDir(currentFile) else '点到了文件夹 dim n set n=currentDiv.nextSibling do if vartype(n) =9 then exit do if left(n.title,len(currentDir)) <> currentDir then exit do set currentDiv =n set n=n.nextSibling loop end if dim re,newFile,s,f set re = new RegExp re.Pattern = "[^\d]" re.Global=true newFile = currentDir & "新收藏" & re.Replace(mid(cstr(now()),3),"") & ".txt" currentFile=newFile'新建文件是当前文件 '构造innerHTML s = "<div class='file' title='" & newFile s = s & "' style='margin-left:" if currentDiv.className = "file" then s = s & currentDiv.style.marginLeft & ";' > " else s = s & px2Int(currentDiv.style.marginLeft) + 8 & ";' > " end if s = s & "<span class='fileIcon'>2" & "</span>" s = s & "<input value='" s = s & getTxtName(lastOne(newFile,"\")) & "' title='" & getTxtName(lastOne(newFile,"\")) & "' onchange='vbs:reName me' />" s = s & "</div>" '插入innerHTML currentDiv.insertAdjacentHTML "AfterEnd",s articleTitle.value = getTxtName(lastOne(newFile,"\")) txt.value = "" currentDir = "" set currentDiv = currentDiv.nextSibling set currentSpan = currentDiv.getElementsByTagName("SPAN")(0) currentSpan.style.color = "red" '创建文件 set f=fso.CreateTextFile(newFile) f.close end sub function getFolderDir(fullDir) '输入得到全路径,得到文件夹路径 s=LastOne(fullDir,"\") getFolderDir = left(fullDir,len(fullDir)-len(s)) end function sub saveFile '保存对文件的修改 Dim st Set st = fso.OpenTextFile(currentFile, 2, True) st.Write txt.value st.close end sub sub deletFile '删除文件 dim n if window.event.keyCode =46 and window.event.srcElement.tagName<>"INPUT" then if currentFile<>"" then if currentFile = thisFileDir then alert "不允许删除本文件!" exit sub end if if fso.FileExists(currentFile) then fso.deletefile currentFile,true currentDiv.parentElement.removeChild currentDiv txt.value = "" currentFile = "" articleTitle.value = "" end if end if if currentDir<>"" then if currentDir = thisFileFolder then alert "不允许删除根目录!" exit sub end if set n = currentDiv.nextSibling if window.confirm( currentDir & vbcrlf & "这个文件夹有子文件,你要删除全部子文件吗?") then do if vartype(n) =9 then exit do if px2Int(n.style.marginLeft) <= px2Int(currentDiv.style.marginLeft) then exit do n.parentElement.removeChild n set n=currentDiv.nextSibling loop if fso.FolderExists(currentDir) then fso.DeleteFolder currentDir currentDiv.parentElement.removeChild currentDiv end if end if end if end sub sub showMe(obj1,obj2) obj1.style.display="" obj2.style.display="none" end sub sub beginDrag '开始拖拽 delatX=window.event.clientX - px2Int(hide_control.currentStyle.left) document.attachEvent "onmousemove",getRef("moveHandler") dragAble = true window.event.cancelBubble = true end sub sub moveHandler '移动绑定事件 if not dragAble then exit sub dim x x = window.event.clientX - delatX hide_control.style.left= x & "px" frmTree.style.width = abs( x - 10) & "px" frmSeach.style.width = abs( x - 10) & "px" txtFrm.style.left=( x + 20) & "px" window.event.cancelBubble=true end sub sub upHandler '放开绑定事件 document.detachEvent "onmousemove",getRef("moveHandler") dragAble = false window.event.cancelBubble=true end sub function getTxtName(fullName) '去掉文件名后缀 dim s:s=lastOne(fullName,".") getTxtName = left(fullName ,len(fullName)-len(s)-1) end function sub reName(obj) '改名 dim Arr,a Arr=array("/","\",":","*","?",chr(34),"|","<",">") for each a in Arr if instr(obj.value,a) >0 then alert "命名不能含有/\:*?" & chr(34) & "|<>其中的一个" obj.focus exit sub end if next dim oldName,newName,oldPath,oldType oldName = obj.parentElement.title oldPath = getFolderDir(oldName) oldType = lastOne(oldName,".") newName = oldPath & obj.value & "." & oldType Set f = fso.GetFile(oldName) f.copy newName f.delete True obj.parentElement.title = newName articleTitle.value = getTxtName(lastOne(newName,"\")) end sub Function LastOne(Str,splitStr) '输入字符和分隔符,得到最后一部分 LastOne = right(Str,len(Str)-InStrRev(Str,splitStr)) End Function sub selectControl '控制页面选择的状态 if window.event.srcElement.tagName<>"INPUT" and window.event.srcElement.tagName<>"TEXTAREA" then document.selection.clear end if end sub function isTXT(fileNameStr) '判断是否是文本类型的文件 dim s,Arr,a,returnValue returnValue = false s=lcase(LastOne(fileNameStr,".")) Arr=array("txt","htm","html","asp","csv","aspx","xml","js","vbs","ini","bat","css","htc","hta","xsl","xslt","sql") for each a in Arr if a=s then returnValue =true exit for end if next isTXT = returnValue end function sub showFolder(obj) dim folderspec :folderspec = obj.title obj.setAttribute "parsed",true if not fso.FolderExists(folderspec) then alert folderspec & "该文件夹不存在,也许是被移动了,所以刷新一下本程序" window.location.reload exit sub end if dim f, f1, sf,sf1,i,s,fName set f=fso.GetFolder(folderspec) set sf=f.Subfolders re = re & f.name & "\" s="" for each sf1 in sf s = s & "<div class='folder' title='" & sf1.path & "\' style='margin-left:" & cint(replace(obj.style.marginLeft,"px","")) + 8 & ";'>" s = s & "<span class='folderIcon'>0" & "</span><input value='" & sf1.name & "' readonly style='cursor:hand;'/></div>" next For Each f1 in f.Files if isTXT(f1.name) then s = s & "<div class='file' title='" & f1.path s = s & "' style='margin-left:" s = s & px2Int(obj.style.marginLeft) + 8 & ";' > " s = s & "<span class='fileIcon'>2" & "</span>" s = s & "<input value='" fName = getTxtName(f1.name) s = s & fName & "' title='" & fName & "' onchange='vbs:reName me' />" s = s & "</div>" end if Next obj.insertAdjacentHTML "AfterEnd",s end sub function px2Int(px) px2Int = cint(replace(px,"px","")) end function sub f_Click() dim obj,d,f,state set obj = window.event.srcElement if obj.id="searchKey" then exit sub if obj.tagName<>"SPAN" and obj.tagName<>"INPUT" then exit sub set currentDiv = obj.parentElement set obj = currentDiv.getElementsByTagName("SPAN")(0) window.event.cancelBubble = true select case obj.className case "folderIcon" '点到了文件夹 if vartype(currentSpan)=8 then currentSpan.style.color = "navy" end if set currentSpan = obj state = abs(cint(obj.innerHTML) -1) obj.innerHTML = state obj.style.color="red" set d = obj.parentElement currentDir = d.title currentFile = "" if d.getAttribute("parsed")=true then '合拢 fold d,state else '解析 showFolder d end if case "fileIcon" '点到了文件,在textArea里面载入文本文件 if vartype(currentSpan)=8 then currentSpan.style.color = "navy" end if set currentSpan = obj obj.style.color="red" readText obj.parentElement.title currentDir = "" currentFile = obj.parentElement.title end select end sub sub fold(o,stateOpen) '合拢 dim n set n=o.nextSibling do if vartype(n) =9 then exit do if px2Int(n.style.marginLeft) <= px2Int(o.style.marginLeft) then exit do if stateOpen=1 then n.style.display="" else n.style.display="none" set n=n.nextSibling loop end sub sub readText(filePath) Dim f,fName if not fso.FileExists(filePath) then alert filePath & vbcrlf & "该文件不存在,也许是被移动了,所以刷新一下本程序" window.location.reload exit sub end if 'TXT已经加载的当前文件不再加载. if filePath = currentFile then exit sub txt.value = "" Set f = fso.OpenTextFile(filePath, 1, true) if not f.AtEndOfStream then txt.value = f.readAll else txt.value = "" end if fName = lastOne(filePath,"\") articleTitle.value = getTxtName(fName) f.Close Ln.innerText = 1 End sub sub TabTxt() '支持tab键的文本框 if window.event.keyCode=38 then if cint(Ln.innerText) >1 then Ln.innerText = cint(Ln.innerText)-1 end if if window.event.keyCode=40 then Ln.innerText = cint(Ln.innerText)+1 end if if window.event.keyCode<> 9 then exit sub dim sel,mytext set sel = document.selection.createRange() 'txt.createTextRange mytext = sel.text if len(mytext)=0 then sel.text =string(4," ") window.event.cancelBubble = true window.event.returnValue = false exit sub end if dim t,Arr t=0 Arr = split(mytext,vbcrlf) if window.event.shiftKey then '按sift for i=0 to ubound(Arr) if left(Arr(i),1)=vbtab then Arr(i) = mid(Arr(i),2) t= t + 1 else for j=1 to 4 if left(Arr(i),1)=" " then Arr(i) = mid(Arr(i),2) t= t + 1 else exit for end if next end if next t= t else '不按sift for i=0 to ubound(Arr) Arr(i) = vbtab & Arr(i) t= t +1 next end if mytext = join(Arr,vbcrlf) sel.text = mytext sel.collapse true sel.moveEnd "character",0 sel.moveStart "character",(len(mytext) * -1) + t sel.select() window.event.cancelBubble = true window.event.returnValue = false end sub '下面是关于搜索 dim seachResult'查找结果 dim num '结果数量 dim word'搜索关键字 tagStop = false seachResult ="" sub seachFile() num =0 seachList.innerText = "搜索结果" word = searchKey.value seachResult ="" if trim(word)="" then alert "关键字为空!" searchKey.focus exit sub else dim l for each l in list.getElementsByTagName("DIV") if l.id<>"seachList" then list.removeChild l next seachList.innerText = "搜索结果" seachWord thisFileFolder seachList.insertAdjacentHTML "AfterEnd",seachResult seachList.innerText = "搜索结果:" & num & "个" alert "搜索完毕!" end if end sub sub seachWord(theFolder) dim f,f1,st,re,fd,fd1 set f = fso.GetFolder(theFolder) for each f1 in f.Files if isTxt(f1.name) then if instr(f1.name,word)>0 then seachResult = seachResult & "<div class='file' title='" & f1.path seachResult = seachResult & "'><span class='fileIcon'>2" & "</span>" seachResult = seachResult & "<input value='" fName = getTxtName(f1.name) seachResult = seachResult & fName & "' title='" & fName & "'>" seachResult = seachResult & "</div>" num = num + 1 else set st = f1.OpenAsTextStream '逐行读 Do While st.AtEndOfStream <> True if instr(st.ReadLine,word)>0 then num = num +1 seachResult = seachResult & "<div class='file' title='" & f1.path seachResult = seachResult & "'><span class='fileIcon'>2" & "</span>" seachResult = seachResult & "<input value='" fName = getTxtName(f1.name) seachResult = seachResult & fName & "' title='" & fName & "'>" seachResult = seachResult & "</div>" exit do end if Loop st.Close end if end if next set fd = fso.GetFolder(theFolder) for each fd1 in fd.SubFolders seachWord fd1 next end sub sub showHelp dim msg msg = " 文本代码管理工具【IE5.5以上版本】" & vbcrlf msg = msg & "------------------------------------------------" & vbcrlf msg = msg & " 使用方法:放到文本类型的文件夹里面,双击运行。" & vbcrlf msg = msg & "功能:" & vbcrlf msg = msg & "1,快速浏览,预览CTRL+B,搜索文本类型的文件和代码;" & vbcrlf msg = msg & "2,按DEL可以删除点中的文件和文件夹;" & vbcrlf msg = msg & "3,可以修改文件名和文字内容,CTRL+S保存;" & vbcrlf msg = msg & "4,可以创建文件CTRL+N并且编辑保存;" & vbcrlf msg = msg & "5,文本编辑支持TAB和shift+TAB键;" & vbcrlf msg = msg & vbcrlf msg = msg & "作者:CSDN超级大笨狼[2005/1/18版本]" & vbcrlf msg = msg & "欢迎传播使用,交流代码[email protected]" & vbcrlf msg = msg & "http://superdullwolf.cnzone.net/index.asp" & vbcrlf alert msg end sub </SCRIPT> </BODY> </HTML>