Рекурсивно удалять 0KB файлы с помощью окон cmd
У меня есть некоторый процесс, который создает некоторые файлы размером 0 КБ в каталоге и его подкаталогах.
Как удалить файлы из файловой системы с помощью командной строки Windows?
Любая отдельная команда или script, которые будут выполнять задачу, будут работать.
Я могу запускать только простые команды и скрипты cmd, работая на удаленной машине с ограниченным доступом.
Ответы
Ответ 1
Объединяя все это:
for /r %F in (*) do if %~zF==0 del "%F"
Если вам это нужно в пакетном файле, вам нужно удвоить значение %
:
for /r %%F in (*) do if %%~zF==0 del "%%F"
Примечание. Я предполагал, что вы имели в виду файлы размером в 0 байтов. Если с 0 КБ вы имеете в виду что-то меньшее, чем 1000 байт, то над if
нужно читать if %~zF LSS 1000
или независимо от вашего порога.
Ответ 2
@echo off
setLocal EnableDelayedExpansion
for /f "tokens=* delims= " %%a in ('dir/s/b/a-d') do (
if %%~Za equ 0 del "%%a"
)
Найдено по адресу: текст ссылки, кажется, работает, с одной оговоркой: он не будет удалять файлы с именами, содержащими пространства. Там может быть обход, но я боюсь, что партия не моя сильная сторона.
Ответ 3
Это отлично работает, когда опечатка исправлена. Проблема заключалась в отсутствии тильды (~)
например, del "%% a" должно быть del "%% ~ a"
Это действительно удалит файлы с пробелами в имени, потому что он включает токен в "двойные кавычки" - альтернативный метод заключается в использовании "короткого имени", как показано во втором примере [%% ~ sa
@echo off
setLocal EnableDelayedExpansion
for/f "tokens = * delims =" %% a in ('dir/s/b/a-d') делают ( если %% ~ Za equ 0 del "%% ~ a" )
@echo off
setLocal EnableDelayedExpansion
for/f "tokens = * delims =" %% a in ('dir/s/b/a-d') делают ( если %% ~ Za equ 0 del %% ~ sa )
Ответ 4
Вы можете попробовать find.exe из UnxUtils.
find . -type f -empty -delete