Подтвердить что ты не робот

Рекурсивно удалять 0KB файлы с помощью окон cmd

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


Я могу запускать только простые команды и скрипты cmd, работая на удаленной машине с ограниченным доступом.
4b9b3361

Ответ 1

  • Итерации рекурсивно над файлами:

    for /r %F in (*)
    
  • Найдите файлы нулевой длины:

    if %~zF==0
    
  • Удалите их:

    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

@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