2014-10-31 2 views
0

Я пытался написать код для проверки определенного файла, если он существует в папке и вложенной папке в любой подпапке \ DESKTOP в каталоге c: \ users *. * (= все каталоги пользователей). И если файл существует в любой папке, скрипт удалит файл.Проверка и удаление определенного файла в папке и вложенных папках

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 
+0

И каков ваш вопрос? – Bond

+0

Сценарий не выполняет свою работу, если я не скопировал файл в «C: \ users». Мне нужно несколько примеров того, как это сделать, я думал, могу ли я использовать wmi для поиска в любой подпапке \ DESKTOP в каталоге c: \ users *. * (= All users). – xka

+0

Используйте 'objDesktopFolder.Path &" \ sample1.lnk "' вместо 'Folder &" \ sample1.lnk "' в 'Для каждого цикла objDesktopFolder .. Next' – JosefZ

ответ

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 

Это будет выглядеть только для файлов в папках непосредственно на рабочем столе (а также файл на рабочем столе, конечно). Если вы хотите просмотреть дополнительные уровни подпапок, тогда лучше всего создать отдельный подраздел, который использует рекурсию для прохождения всех уровней подпапок.

+0

Привет, спасибо за это. Я попытаюсь создать суб, который будет просматривать дополнительные уровни подпапок. – xka

Смежные вопросы