FORFILES не удаляет файлы в подкаталоге

Вопрос или проблема

Ниже мой однострочник forfiles:

FORFILES /P "X:\LOGS\HS" /S /M *.log  /D -1 /C "CMD /C del /Q @FILE"qq ~q

Несмотря на то, что у меня есть опция /S для удаления лог-файлов в X:\LOGS\HS, там есть несколько подпапок, и она не удаляет лог-файлы ниже по дереву. Как я могу это исправить?

Я бы объяснил это пробелами в имени файла/пути

когда

FORFILES /P "X:\LOGS\HS" /S /M *.log  /D -1 /C "CMD /C del /Q @FILE"qq ~q

встречает X:\LOGS\HS\My Folder\Stuff.log, он передаст его команде del как

del X:\LOGS\HS\My Folder\Stuff.log

где команда del затем попытается удалить файлы X:\LOGS\HS\My и Folder\Stuff.log

Чтобы это исправить, вам нужно обернуть имя файла в кавычки.

FORFILES /P "X:\LOGS\HS" /S /M *.log  /D -1 /C "CMD /C del /Q ""@FILE"""qq ~q

это должно дать вам немного больше успеха

Ответ или решение

Ваш вопрос о том, почему команда FORFILES не удаляет файлы в подкаталогах, действительно направляет к важной проблеме обработки путей с пробелами. Давайте подробно разберем вашу команду и возможные способы решения проблемы.

Вы используете следующую команду:

FORFILES /P "X:\LOGS\HS" /S /M *.log /D -1 /C "CMD /C del /Q @FILE"

При использовании параметра /S команда FORFILES пытается редактировать файлы, находящиеся во всех подкаталогах директории X:\LOGS\HS. Однако, как вы упомянули, если в пути или имени файла существует пробел, команда del может неправильно интерпретировать файл и не сможет его удалить.

Для решения этой проблемы, вам необходимо заключить имя файла в дополнительные кавычки. Таким образом, команда FORFILES будет выглядеть так:

FORFILES /P "X:\LOGS\HS" /S /M *.log /D -1 /C "CMD /C del /Q ""@FILE"""

Использование двойных кавычек вокруг @FILE обеспечивает корректную интерпретацию полного имени файла, даже если оно содержит пробелы. Каждый набор кавычек обрабатывается Windows как отдельный аргумент, позволяя команде del правильно ссылаться на файл.

Подводя итоги:

  1. Убедитесь, что вы используете двойные кавычки внутри команды CMD /C для аргумента del.
  2. Проверьте также, что у вас есть соответствующие разрешения на удаление файлов в указанных директориях.
  3. Воспользуйтесь дополнительным логированием, если необходимо, для отслеживания файлов, которые не были удалены, чтобы выяснить, связано ли это с другими проблемами.

Применив вышеуказанные изменения, вы должны получить ожидаемый результат, и команда FORFILES успешно удалит файлы в подкаталогах.

Оцените материал
Добавить комментарий

Капча загружается...