以最快的方式递归清理分区上的HTML文件?

时间:2012-02-26 12:41:38

标签: html vbscript wsh

用于清除HTML文件的

脚本,即删除</HTML>标记(不带引号)后的所有内容,对于分区中的所有文件进行递归删除。这就像在病毒感染/注入多个HTML文件中的代码后恢复Web服务器内容

2 个答案:

答案 0 :(得分:0)

您已将此问题标记为“vbscript”和“wscript”,我不知道,但如果您可以访问unix或linux系统,则可以使用此命令行:

find /path/to/root -exec grep -qi '</html>' -exec sed -ne -i'' 's|</html>.*|</html>|I;1,/<\/html>/Ip' {} \;

检查sed的命令行选项,确保以正确的方式使用-i选项。这在FreeBSD中适用于我。

在尝试此类操作之前,请务必备份数据。

答案 1 :(得分:0)

从顶级代码开始测试:

  Dim aTests : aTests = Array( _
      Array( "", "", "" ) _
    , Array( "<html></html>junk", "</html>", "<html></html>" ) _
  )
  Dim aTest
  For Each aTest In aTests
      WScript.Echo qq(aTest(0))
      WScript.Echo qq(aTest(1))
      WScript.Echo qq(cutTail(aTest(0), aTest(1)))
      Wscript.Echo CStr(aTest(2) = cutTail(aTest(0), aTest(1)))
      WScript.Echo
  Next

一个可以解决你的第一个子任务的函数 - 清理一个字符串:

Function cutTail(sTxt, sFnd)
  cutTail = sTxt
  Dim nPos : nPos = Instr(1, sTxt, sFnd, vbTextCompare)
  If 0 < nPos Then cutTail = Left( sTxt, nPos + Len(sFnd) - 1)
End Function

写一个裸骨Sub来遍历文件夹树并为找到的每个文件调用“do do I want”Sub:

Sub walkDirs(oDir, fFile)
  Dim oItem
  For Each oItem In oDir.Files
      fFile oItem
  Next
  For Each oItem In oDir.SubFolders
      walkDirs oItem, fFile
  Next
End Sub

用一个琐碎的工作人员测试驱动它Sub:

  Dim sRDir : sRDir     = "..\data"
  Dim fFile : Set fFile = GetRef("justPrint")
  walkDirs goFS.GetFolder(sRDir), fFile

Sub justPrint(oFile)
  WScript.Echo "Processing:", qq(oFile.Path)
End Sub

为清理文件的工作人员Sub编写“第一次尝试”版本:

Sub cleanHtml(oFile)
  WScript.Echo "Processing:", qq(oFile.Path)
  Dim sAll : sAll = cutTail(OFile.OpenAsTextStream(ForReading).ReadAll(),"</html>")
  OFile.OpenAsTextStream(ForWriting).Write sAll
End Sub

在具有代表性样本文件集的测试文件夹上使用它。寻找问题:

对于以下数据,cutTail会失败:

, Array( "<html></html>", "</HTml>", "<html></html>" ) _
, Array( "<html><!--</html>-->keep</html>junk", "</HTml>", "<html><!--</html>-->keep</html>" ) _

由于安全限制,遍历是否会失败?

你的脚本是否会破坏.js,.css或.jpg文件?