2015-12-16 1 views
-1

У меня есть vbs, который я написал.В чем разница между методом FSO.DeleteFolder() и oWS.Run «% comspec%/c rmdir ...», 1, True?

Set FSO = CreateObject("Scripting.FileSystemObject") 
Set oWS = CreateObject("WScript.Shell") 
Set objFolderUsers = FSO.GetFolder("\\"& strComputer &"\C$\Users\").Subfolders 
... 

Позже, я что-то вроде:

For Each objFlder In objFolderUsers 

    user = Right(objFlder, Len(objFlder) - InStrRev(objFlder, "\")) 
    temp = objFlder & "\AppData\Local\Temp\" 

    'That's the line !...  
    If FSO.FolderExists(temp) Then FSO.DeleteFolder(temp) 

    If Not IsExcludeProfile(user) Then 
     If Left(objFlder.DateLastModified, 4) <= minYear Then 
      oWS.Run "%comspec% /c rmdir " & objFlder & " /s /q", 0, True 
      oWS.Run "%comspec% /c net user " & user & " /delete", 0, True 
     End If 
    End If 
Next 

мой вопрос: Есть ли разница между FSO.DeleteFolder (темп) и oWS.Run «% COMSPEC%/с RmDir «& temp, 1, True, потому что когда я делаю первое, все в порядке, но когда я делаю второй (oWS.Run) И objFlder =« По умолчанию », все это удаляется, а не только Temp, как я хочу. .

+0

похоже, что вы передаете 'objFlder' в oWS.Run вместо полного пути к папке, которая является' temp' – WhiteHat

+0

Я использовал для прохождения темпа ..... ** "% comspec%/c rmdir "& temp, 1, True ** –

+0

Зачем использовать' oWS.Run', чтобы сделать все так же просто, как удалить папку? Вы уже используете 'FileSystemObject' для итерации через объекты' Folder', поэтому почему бы не использовать ['objFlder.Delete (True)'] (https://msdn.microsoft.com/en-us/library/0k4wket3 (v = vs.84) .aspx)? – Lankymart

ответ

0

Try положить ограждающих кавычки в имени файла, переданного Rmdir, потому что пробелы могут прекратить строку, которую он получает до ее конца:

oWS.Run "%comspec% /c rmdir """ & objFlder & """ /s /q", 0, True 

Просто напомнить, что «» внутри строкового литерала в VBS означает единичную "в содержимом строки.

+0

Дело в том, что команда oWS.Run работает для всех остальных каталогов, которые я не хочу удалять (_Administrator_, _Public_, _etc._)? ... –

+0

@ Louis-Alex Это будет работать для папки без пробелов, как только вы получите папку типа «Мои документы» * (например) *, она не будет работать без включения в двойные кавычки * ('' Мои документы '') *. – Lankymart

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