Назад | Перейти на главную страницу

Удалить папки с исключениями (случай)

Я нашел сценарий VB, который использует FileSystemObject для удаления всех папок на диске, кроме тех, которые я указал, моя проблема в том, что FileSystemObject не может видеть или перечислять папку с конечной / ведущей точкой / пробелом, но команда DIR может,

Я пытаюсь запустить команду для удаления всех папок на диске (это из winPE во время развертывания ОС, так что все в порядке), ЗА ИСКЛЮЧЕНИЕМ той, которую я указываю, это часть того, с чем я работаю, которая отлично работает, но не выбирает папки со специальными именами ... есть ли способ использовать команду DIR для подачи "Select Case"?

For each oFolder in oFSO.GetFolder(oEnvironment.Item("DestinationLogicalDrive") & "\").Subfolders

Select Case lcase(oFolder.Name)

Case "minint", "recycler", "system volume information", "deploy", "drivers", "_smstasksequence", "smstslog", "sysprep", "userstate"
oLogging.CreateEntry "Skipping " & oFolder.Path, LogTypeInfo
Case Else
oLogging.CreateEntry "Deleting " & oFolder.Path, LogTypeInfo

sCmd = "cmd /c rd ""\\?\" & oFolder.Path & """ /S /Q"

iRc = RunAndLog(sCmd, false)
TestAndLog iRc,"Execution: " & sCmd
If iRC <> 0 Then
If oFSO.FolderExists(oFolder.Path) Then

oLogging.CreateEntry "Failed to delete " & oFolder.Path & " will try to rename", LogTypeError
sCmd = "cmd /c rename """ & oFolder.Path & """ """ & oFolder.Name & ".bad"""
iRc = RunAndLog(sCmd, false)
TestAndLog iRc,"Execution: " & sCmd

If iRC <> 0 Then
If oFSO.FolderExists(oFolder.Path) Then
oLogging.CreateEntry "Failed to delete or rename " & oFolder.Path & " the image WILL fail with NTLDR", LogTypeError
' TODO: notify, sit and wait
End If
End If
End If
End If

End Select

хорошо, вместо использования объекта файловой системы я решил использовать простую команду DIR в цикле FOR,

@echo off

for /f "tokens=*" %%i in ('dir /s /a:D /b \\?\C:\*.*^|"%~dp0"\findstr /I /V /G:"%~dp0\exclusion.txt"') do Call :Delete "%%i"

:Delete

echo found %1

rd /s /q %1

вот что происходит:

DIR перечисляет все каталоги в \? \ C: \ рекурсивно и выводит пустой список, выводящий вывод на findstr, который исключает имена, найденные в этом текстовом файле, а затем вызывает команду удаления, файл exclusion.txt содержит элементы, которые я хочу исключить, спасибо вам и "TheOutcaste" из этой ветки: forum.techguy.org/.../833910-solved-help-r-loop.html