繁体   English   中英

VB脚本删除某些文件,如果找到文件,则将其他文件复制到目录

[英]VB Script to delete certain files and if files are found copy other files to directory

我的硬盘驱动器感染了病毒。 该病毒先加密文件,然后索取赎金以解密它们。 这些文件是HELP_DECRYPT.HTML,HELP_DECRYPT.PNG,HELP_DECRYPT.TXT和HELP_DECRYPT.URL。

驱动器上有成千上万的受感染文件。 我正在尝试编写脚本来遍历驱动器上的所有文件夹,如果发现任何恶意文件,它将删除它们。 然后,我想是否从备份驱动器中的同一目录中复制文件。 如果在I \\ Folder \\中找到,则将从F \\ Folder \\中获取文件。

在我的情况下,受感染的驱动器是Y,备份驱动器是X。

我是VBScripts的新手,这是到目前为止的内容:

    set fso = CreateObject("Scripting.FileSystemObject")
ShowSubFolders FSO.GetFolder("Y:\"), 3

Sub ShowSubFolders(Folder, Depth)
    If Depth > 0 then
        For Each Subfolder in Folder.SubFolders
            'Wscript.Echo Subfolder.Path
    DeleteFiles(subFolder.path)
  On Error Resume Next
            ShowSubFolders Subfolder, Depth -1 

        Next
    End if
End Sub


  'deletes the malicious files and calls the copy function'
Function DeleteFiles(path)
'wscript.echo("in delete method")
  set FSO2 = Createobject("Scripting.FileSystemObject")
  set ofolder = createobject("Scripting.FileSystemObject")
  set ofolder = FSO2.GetFolder(path)

  if FSO2.FileExists("HELP_DECRYPT.URL") Then
    ofolder.DeleteFile("HELP_DECRYPT.PNG")
    ofolder.DeleteFile("HELP_DECRYPT.HTML")
    ofolder.DeleteFile("HELP_DECRYPT.URL")
    ofolder.DeleteFile("HELP_DECRYPT.TXT")      
      wscript.echo("DeletedFiles")
  copyFiles(FSO.GetParentFolder) 
    end if

End Function


  'copies files from the backup'
Function CopyFiles(from)
    dim to1 'where we're copying to
    to1=from 'where we're copying from
    Call Replace (from, "Y:", "X:")
    SET FSO3 = CreateObject("Scripting.FileSystemObject")
    For Each file In from 'not sure about "file"
        FSO3 = file
        Call FSO3.CopyFile (from, to1, true)'copies file and overwrites if already there
    Next
End Function

这是我会用的:

Option Explicit

Dim FSO, badFiles
Set FSO = CreateObject("Scripting.FileSystemObject")
badFiles = Array("HELP_DECRYPT.PNG", "HELP_DECRYPT.URL", "HELP_DECRYPT.HTML", "HELP_DECRYPT.TXT")

Walk FSO.GetFolder("Y:\")

Sub Walk(folder)
  Dim subFolder
  For Each subFolder in folder.SubFolders
    DeleteFiles subFolder, badFiles
    RestoreFiles "X:", subFolder
    Walk subFolder
  Next
End Sub

Sub DeleteFiles(folder, filesToDelete)
  Dim file
  For Each file In filesToDelete
    file = FSO.BuildPath(folder.Path, file)
    If FSO.FileExists(file) Then FSO.DeleteFile file, True
  Next
End Sub

Sub RestoreFiles(sourceRoot, destinationFolder)
  Dim sourcePath, file
  WScript.Echo "Restoring " & destinationFolder.Path & " ..."
  sourcePath = Replace(destinationFolder.Path, destinationFolder.Drive, sourceRoot)
  If FSO.FolderExists(sourcePath) Then
    For Each file In FSO.GetFolder(sourcePath).Files
      WScript.Echo file.Name
      ' maybe add a DateLastModified check here?
      file.Copy FSO.BuildPath(destinationFolder.Path, file.Name), True
    Next
  Else
    WScript.Echo "Warning! Folder not found: " & sourcePath
  End If
End Sub

使用VBScript的一般提示:

  • 始终使用Option Explicit
  • 除非在非常有限的情况On Error Resume Next否则请避免“ On Error Resume Next 简单地抑制任何错误绝不是一个好主意。
  • 使用cscript.exe在命令行上运行上述脚本,因此您无需单击1000个消息框即可查看脚本的Echo输出。
  • 使用全局FSO对象。 无需在每个函数中定义一个新的
  • 尝试通用。 看看上面的DeleteFiles() RestoreFiles()实际上是如何根本不适合您当前的问题的。 您可能可以在其他脚本中重复使用这些功能,而不必进行更改。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM