Пакет, чтобы получить 0 файлов байтов - PullRequest
2 голосов
/ 29 сентября 2011

Я пытаюсь запустить пакет, чтобы получить количество 0-байтовых файлов в каталоге.Если счетчик один или несколько, я хочу удалить файлы, иначе выйдите.Вот что у меня есть.

@echo off
if "%~z1" == "" (
   echo File does not exist.
) else if "%~z1" == "0" (
   echo File is empty.
) else (
   echo File is non-empty.
)

1 Ответ

4 голосов
/ 29 сентября 2011

(Отредактировано, см. Комментарии. Исходный ответ ниже.)

Следующий скрипт подсчитывает пустые файлы в каталоге, а затем, если число оказывается больше 0, удаляетпустые файлы.Каталог указывается в качестве параметра пакетного сценария.Например, если вам нужно обработать каталог C:\Users\DS\Downloads, вызовите скрипт следующим образом (при условии, что script.bat - это имя файла скрипта):

script.bat C:\Users\DS\Downloads

Это скрипт:

@ECHO OFF

IF "%~1" == "" (ECHO Usage: %~nx0 path\to\files& GOTO :EOF)

SET "workdir=%~1"

SET count=0
SET "command=SET /A count+=1"
CALL :processempty
ECHO Number of empty files: %count%

IF %count% GTR 0 (
  ECHO Deleting files...
  SET "command=DEL ^"%%~F^""
  CALL :processempty
)
GOTO :EOF

:processempty
FOR %%F IN ("%workdir%\*") DO (
  IF "%%~zF" == "0" %command%
)

Исходный ответ следующий:

@ECHO OFF
SETLOCAL
SET firstfile=
SET delfirstfile=
FOR %%F IN (*) DO (
  IF "%%~zF" == "0" (
    IF DEFINED firstfile (
      ECHO DEL "%%F"
      SET delfirstfile=1
    ) ELSE (
      SET "firstfile=%%F"
    )
  )
)
IF DEFINED delfirstfile ECHO DEL "%firstfile%"
ENDLOCAL

Вышеприведенный скрипт работает следующим образом:

  1. Он повторяет всефайлы в текущем каталоге и проверяет их размеры.

  2. Когда первый пустой файл найден, его имя сохраняется в переменной.

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

  4. После цикла проверяется индикаторная переменная.Если он установлен, первый пустой файл удаляется.

PS.Я бы посоветовал вам сначала запустить этот скрипт, чтобы убедиться, что он работает правильно.После этого вам нужно будет удалить ECHO перед каждой из двух команд DEL, чтобы скрипт действительно удалил файлы.

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