【问题标题】:Check and Delete specific file in a folder and subfolders检查并删除文件夹和子文件夹中的特定文件
【发布时间】:2014-12-27 23:53:21
【问题描述】:

我试图编写代码来检查特定文件是否存在于 c:\users*.*(= 所有用户目录)中任何子文件夹 \DESKTOP 的文件夹和子文件夹中。如果文件存在于任何文件夹中,脚本将删除该文件。

Option Explicit

Dim Shell, FSO, DesktopPath
Dim objShortcutFile, objDesktopFolder, objDesktopSubFolder, Folder, strSysDrive

Set Shell = CreateObject("WScript.Shell") 
Set FSO = CreateObject("Scripting.FileSystemObject") 

strSysDrive = Shell.ExpandEnvironmentStrings("%SystemDrive%")

Set Folder = FSO.GetFolder(strSysDrive & "\Users")
msgbox Folder & "\sample1.lnk"
    For Each objDesktopFolder in Folder.SubFolders

        If FSO.FileExists(Folder & "\sample1.lnk") Then

            FSO.DeleteFile Folder & "\sample1.lnk"
            msgbox "success"

        Else

            msgbox "not existing"

        End If
    Next

【问题讨论】:

  • 你的问题是什么?
  • 除非我将文件复制到“C:\users”中,否则脚本不会执行其工作。我需要一些关于如何做到这一点的示例,我在想是否可以使用 wmi 在 c:\users*.* (= 所有用户目录)中的任何子文件夹 \DESKTOP 中搜索。
  • 在For Each objDesktopFolder .. Next 循环中使用objDesktopFolder.Path & "\sample1.lnk" 而不是Folder & "\sample1.lnk"

标签: search vbscript directory delete-file subdirectory


【解决方案1】:

Folder 是C:\Users 文件夹对象; objDesktopFolder 是每个文件夹的文件夹对象,直接在 C:\Users 中,例如C:\Users\user1 - 不是更多级别的子文件夹,例如C:\Users\user1\Desktop(所以这是一个误导性的名称,因为它不是桌面文件夹)。

如果您只想直接在桌面上查看,则只需更改此行(以及使用该路径的任何其他行): If FSO.FileExists(Folder & "\sample1.lnk") Then

到: If FSO.FileExists(FSO.BuildPath(objDesktopFolder.Path, "Desktop\sample1.lnk")) Then

如果您还想查看桌面上可能存在的每个文件夹,则必须执行相同的逻辑,例如

Option Explicit

Dim Shell, FSO, DesktopPath
Dim objShortcutFile, objDesktopFolder, objDesktopSubFolder, Folder, strSysDrive
Dim filepath, userfolder, desktop, subfolder, filename

Set Shell = CreateObject("WScript.Shell") 
Set FSO = CreateObject("Scripting.FileSystemObject") 

strSysDrive = Shell.ExpandEnvironmentStrings("%SystemDrive%")

Set Folder = FSO.GetFolder(strSysDrive & "\Users")
msgbox Folder & "\sample1.lnk"
filename = "sample1.lnk"
For Each userfolder in Folder.SubFolders
    desktop = FSO.BuildPath(userfolder.Path, "Desktop")
    filepath = FSO.BuildPath(desktop, filename)
    If FSO.FolderExists(desktop) Then
        ' Delete file on desktop
        If FSO.FileExists(filepath) Then
            FSO.DeleteFile filepath, True
            MsgBox "Success: deleted " & filepath
        Else
            MsgBox filepath & " doesn't exist"
        End If
        ' Check folders on desktop
        For Each subfolder In FSO.GetFolder(desktop).SubFolders
            filepath = FSO.BuildPath(subfolder.Path, filename)
            If FSO.FileExists(filepath) Then
                FSO.DeleteFile filepath, True
                MsgBox "Success: deleted " & filepath
            End If
        Next
    End If
Next

这只会直接在桌面上的文件夹中查找文件(当然还有桌面上的文件)。如果您想查看更多级别的子文件夹,那么最好创建一个单独的子文件夹,使用递归遍历所有级别的子文件夹。

【讨论】:

  • 嗨,谢谢。我将尝试创建一个子文件夹,以查看更多级别的子文件夹。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-15
  • 1970-01-01
  • 2012-01-02
  • 2014-11-12
  • 2012-11-19
  • 1970-01-01
相关资源
最近更新 更多