删除带排除项的文件夹(案例)

删除带排除项的文件夹(案例)

我发现了一个 VB 脚本,它使用 FileSystemObject 删除驱动器上除我指定的文件夹之外的所有文件夹,我的问题是 FileSystemObject 无法查看或枚举带有尾随/前导句点/空格的文件夹,但 DIR 命令可以

我试图运行一个命令来删除驱动器上的所有文件夹(它是在操作系统部署期间从 winPE 来的,所以没问题),除了我指定的那个,这是我工作的一部分,它工作正常但没有选择特殊命名的文件夹...有没有办法我可以使用 DIR 命令来提供“选择案例”?

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

答案1

好的,我决定在 FOR 循环中使用简单的 DIR 命令,而不是使用文件系统对象,

@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,以排除在该文本文件中找到的名称,然后调用删除命令,文件 rejection.txt 包含我想要排除的项目,感谢您和来自此主题的“TheOutcaste”:forums.techguy.org/.../833910-solved-help-r-loop.html

相关内容