Пакет Windows script для удаления всего в папке, кроме одного

У меня есть script для удаления всех подпапок и файлов в папке:

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

И он отлично работает! Единственная проблема заключается в том, что я хотел бы исключить одну или несколько папок, например, функцию исключения XCOPY.

Я просто не могу понять, как я могу добавить это к script.

Ответ 1

Вы можете попытаться скрыть папки перед циклом 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

Ответ 2

должен быть и только между "%% i" и DEL, иначе он удалит папки, но не файлы.

Ответ 3

Вот способ, который не затрагивает исключенный файл и/или каталог, поэтому никакие атрибуты не изменяются:

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