Рекурсивно удалить файлы 0 КБ, используя Windows CMD - PullRequest
21 голосов
/ 14 ноября 2010

У меня есть какой-то процесс, который создает некоторые файлы размером 0 КБ в каталоге и его подкаталогах.
Как удалить файлы из файловой системы с помощью командной строки Windows?
Любая отдельная команда илискрипт, который будет выполнять задачу, будет работать.Я могу запускать только простые команды и сценарии cmd, работая на удаленном компьютере с ограниченным доступом.

Ответы [ 4 ]

49 голосов
/ 14 ноября 2010
  1. Итерация по файлам рекурсивно:

    for /r %F in (*)
    
  2. Поиск файлов нулевой длины:

    if %~zF==0
    
  3. Удалить их:

    del "%F"
    

Собираем все вместе:

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 голосов
/ 14 ноября 2010
@echo off
setLocal EnableDelayedExpansion
for /f "tokens=* delims= " %%a in ('dir/s/b/a-d') do (
if %%~Za equ 0 del "%%a"
)

Находится по адресу: текст ссылки , кажется, работает, с одной оговоркой: он не удалит файлы с именами, содержащими пробелы.Может быть обходной путь, но я боюсь, что партия не моя сильная сторона.

0 голосов
/ 24 мая 2013

Это прекрасно работает, когда опечатка исправлена.Проблема заключалась в отсутствии тильды (~), например, del "%% a" должен быть del "%% ~ a"

Это действительно удалит файлы с пробелами в имени, потому что оно содержит токен в "двойные кавычки "- альтернативный метод будет использовать" короткое имя ", как показано во втором примере [%% ~ sa

@ echo off setLocal EnableDelayedExpansion для / f" tokens = * delims = "%% ain ('dir / s / b / a-d') сделать (если %% ~ Za равно 0 del "%% ~ a")

@ echo off setLocal EnableDelayedExpansion for / f "tokens = * delims= "%% a in ('dir / s / b / a-d') сделать (если %% ~ Za равно 0 del %% ~ sa)

0 голосов
/ 14 ноября 2010

Вы можете попробовать find.exe из UnxUtils .

find . -type f -empty -delete
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...