@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
:: step 1 : delete all files NOT starting "."
FOR /f "tokens=1*delims=" %%a IN (
'dir /s /b /a-d "%sourcedir%\*" '
) DO (
ECHO %%~nxa|FINDSTR /b /L "." >nul
IF ERRORLEVEL 1 ECHO(DEL "%%a"
)
:: step 2 : delete all directories NOT starting "."
FOR /f "tokens=1*delims=" %%a IN (
'dir /s /b /ad "%sourcedir%\*" ^|sort /r'
) DO (
ECHO %%~nxa|FINDSTR /b /L "." >nul
IF ERRORLEVEL 1 ECHO(RD "%%a"
)
GOTO :EOF
Вам потребуется изменить настройку sourcedir
в соответствии с вашими обстоятельствами.
Требуемые команды DEL просто ECHO
отредактированы для целей тестирования. После того, как вы убедились, что команды верны , измените ECHO(DEL
на DEL
, чтобы фактически удалить файлы.
Необходимые команды RD просто ECHO
отредактированы для целей тестирования, После того, как вы убедились, что команды правильные , измените ECHO(RD
на RD
, чтобы фактически удалить каталоги.
для каждого имени файла во всем поддереве, посмотрите, начинается ли оно с.
, если для errorlevel
задано значение, отличное от 0, и, следовательно, удалить файл.
После того, как это будет сделано, повторите операцию с именами каталогов, но сортируйте найденные имена в обратном порядке, чтобы подкаталог именилюбой каталог появится перед именем каталога. Попытка удалить каталог с rd
- он останется, если он содержит файлы или подкаталоги (которые неявно начнутся .
).Добавьте 2>nul
к строке rd
для подавления сообщений об ошибках (каталог не может быть удален, поскольку он все еще содержит файлы / подкаталоги)