Windows批处理脚本:删除文件夹中除一个文件外的所有内容

12

我有一个脚本可以删除文件夹中的所有子文件夹和文件:

FOR /D %%i IN ("D:\myfolder\*") DO RD /S /Q "%%i" & DEL /Q "D:\myfolder\*.*"

它运行得非常好!唯一的问题是我想排除一个或多个文件夹,就像XCOPY的排除功能。

我只是不知道如何将其添加到脚本中。


我应该说它也会删除文件,这也是它的目的。 - Thomas K
3个回答

17

你可以尝试在 for 循环之前隐藏这些文件夹,然后在循环结束后取消隐藏,像这样:

ATTRIB +H D:\myfolder\keepit
FOR /D %%i IN ("D:\myfolder\*") DO RD /S /Q "%%i" DEL /Q "D:\myfolder\*.*"
ATTRIB -H D:\myfolder\keepit

0
这里有一种方法,不会触及被排除的文件和/或目录,因此不会更改任何属性:
rem // Change to target directory (skip if not found):
pushd "D:\Data" || exit /B 1
rem // Iterate through all subdirectories:
for /D %%D in ("*") do (
    rem // Exclude a certain subdirectory:
    if /I not "%%~nxD"=="ExcludeDir" rd /S /Q "%%~D"
)
rem // Iterate through all immediate files:
for %%F in ("*") do (
    rem // Exclude a certain file:
    if /I not "%%~nxD"=="ExcludeFile.txt" del "%%~F"
)
popd

0

在“%%i”和DEL之间需要加上一个&,否则它将只删除文件夹而不是文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接