用于删除目录中除指定列表之外的所有文件夹的批处理文件

Posted

技术标签:

【中文标题】用于删除目录中除指定列表之外的所有文件夹的批处理文件【英文标题】:Batch file to delete all folders in a directory except a specified list 【发布时间】:2011-11-22 02:58:17 【问题描述】:

我正在寻找一个批处理文件,该文件将进入 C:\Documents and Settings\ 并删除除我想保留的几个文件夹之外的所有文件夹。

【问题讨论】:

【参考方案1】:

这是一个 hack-around =D

如果您在说 folder.txt 中有一个文件夹路径列表,如下所示:

C:\Documents and Settings\Mechaflash C:\Documents and Settings\Mom C:\Documents and Settings\Dad

等等。您可以做的是暂时将它们更改为隐藏文件夹,然后对所有非隐藏文件夹进行 RMDIR。

CD "C:\Documents and Settings\"
FOR /F "tokens=*" %%A IN (folders.txt) DO (
 ATTRIB +H "%%A" /S /D
)
FOR /F "USEBACKQ tokens=*" %%F IN (`DIR /B /A:-HD "C:\Documents and Settings\"`) DO (
 RMDIR /S /Q %%A
)
FOR /F "tokens=*" %%A IN (folders.txt) DO (
 ATTRIB -H "%%A" /S /D
)

【讨论】:

【参考方案2】:

使用 robocopy 的解决方案:

cd /d "C:\Documents and Settings"
md tmp
robocopy . tmp /E /MOVE /XD folderToKeep1 folderToKeep2 ...
rd /s /q tmp

【讨论】:

【参考方案3】:
rem the last space character is deliberate
set yourKeepList="abc def "
for /f %%f in ('dir /b/ad "C:\Documents and Settings"') do (
    (echo %yourKeepList% | findstr /v /i "%%f " 1>nul) && rd /q/s %%f
)

【讨论】:

我无法让这个正常工作;我确实包括了空间。 您是否遇到任何错误?还是这没有删除您预期的目录? C:\Documents and Settings>((echo "keepList.txt " | findstr /v /i "test" 1>nul ) && rd /q/sf ) 系统找不到指定的文件.

以上是关于用于删除目录中除指定列表之外的所有文件夹的批处理文件的主要内容,如果未能解决你的问题,请参考以下文章

关闭 Emacs 中除当前缓冲区之外的所有缓冲区

删除 VIM 中除第一列之外的所有内容

通过 httpd.conf / htaccess 重定向目录中除一个文件之外的所有文件

删除 MySQL 中除 One 之外的所有重复行? [复制]

如何删除 Core Data 存储中除一个对象之外的所有对象?

PHP 删除字符串中除数字之外的所有内容