Не удалось удалить отчет в файл в пакетных файлах DEL

Как создать файл отчета, в котором команда DEL не выполнена должным образом?

Я бы подумал, что вы сделаете:

DEL FILENAME.TXT ECHO "FILENAME.TXT" >> REPORT.TXT

но все, что он делает - это создает пустой файл отчета, независимо от того, находит он FILENAME.TXT или нет. Я хочу создать файл отчета, в котором, если не удастся удалить FILENAME.TXT по какой-либо причине, всплывающее сообщение сбрасывается в REPORT.TXT.

Есть идеи?

2 ответа

Решение

Команда Del всегда возвращает код ошибки 0, даже если файл не найден или если файл требует доступа администратора, поэтому вам нужно проверить, существует ли файл после попытки его удаления:

@Echo OFF

Set "File=File.txt"

Del "%File%" 2>NUL & If exist "%File%" (
    Echo [+] File failed to delete: "%File%" >> "Report.txt" 
)

Pause&Exit

Для большого количества файлов вы можете сделать процедуру, чтобы не писать большой код, например:

@Echo OFF

Call :ReportDelete "C:\File1.txt"
Call :ReportDelete "C:\File2.txt"
Call :ReportDelete "C:\File3.txt"
Call :ReportDelete "C:\File4.txt"
Call :ReportDelete "C:\File5.txt"

Pause&Exit

:ReportDelete
(Del "%~1" 2>NUL & If exist "%~1" (Echo [+] File failed to delete: "%~1" >> "Report.txt")) & (Goto:EOF)

Просто чтобы ты знал. Команда DEL возвращает код ошибки, если возникает серьезная ошибка, однако ее поведение далеко за пределами нашей интуиции, и люди просто поверили бы, что код ошибки вообще не работает.

Вот что я тестировал в команде DEL в Windows 7:

  • Успешное удаление всех файлов: 0 (конечно)
  • Некоторые файлы удалены, некоторые файлы отсутствуют: 0 (интуиция ожидает 1)
  • Ошибка удаления из-за отсутствия разрешения или носителя только для чтения: 0 (интуиция ожидает ≥ 1)
  • Несуществующий привод или привод не готов (например, нет компакт-диска на приводе CD-ROM): 1 (да, вы получите его, но я ожидаю более высокий код ошибки)
  • Неверный путь: 1 (я также ожидаю более высокий код ошибки)

И, если вы зададите список файлов для команды DEL, где хотя бы один из файлов соответствует двум последним видам ошибок, упомянутым выше, то ни один из файлов в списке не будет удален вообще.

Другие вопросы по тегам