Удалить пакетные файлы, старше N дней, на UNC

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

У меня есть макрос, который извлекает данные для файлов в заданном пути, старше N дней.

После того как это было установлено, я попытался запустить пакетный файл для удаления файлов с той же датой спецификации, но появилась ошибка UNC? Какие-нибудь советы?

Ошибка говорит, что UNC-пути к файлам не поддерживаются. Я исследовал это как можно больше, и самый постоянный совет – использовать POPD и PUSHD, однако я не уверен, как это будет применимо для сетевого диска ниже.

Код:

SET log=%temp%\delete.log
SET target.dir= “\\network file path”

ECHO %date%-%time% - Файлы старше 6 месяцев, которые будут удалены>%log%

PAUSE

ECHO %date%-%time% - Удаление файлов старше 6 месяцев>>%log%
Forfiles /p %target.dir% /S /D -180 /M *.* /C “cmd /C Del @path”>>%log%

Следующий фрагмент кода должен сработать:

SET "log=%temp%\delete.log"
SET "target.dir=\\network file path"

ECHO %date%-%time% - Файлы старше 6 месяцев, которые будут удалены>>"%log%"

PAUSE
2>>"%log%" pushd "%target.dir%"
>>"%log%" 2>&1 net use %CD:~0,2%
ECHO %date%-%time% - Удаление файлов старше 6 месяцев>>"%log%"
Forfiles /S /D -180 /M *.* /C "cmd /C >>""%log%"" 2>&1 Del @path"
popd

Объяснение:

  • Определите переменные с помощью SET "variable=string" и затем используйте их в двойных кавычках как "%variable%".
  • PUSHD: Когда указан UNC-путь, PUSHD создаст временную карту диска и затем будет использовать этот новый диск.
  • Forfiles по умолчанию ищет в текущей папке, если /p (путь для поиска) не указан.
  • POPD: POPD также удалит любые временные карты диска, созданные PUSHD.
  • >>, 2>&1: Перенаправление.

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

Удаление файлов в пакетном режиме старше N дней по UNC-путям

Удаление старых файлов в пакетном режиме из общего сетевого каталога может стать сложной задачей, особенно когда возникают ошибки, связанные с поддержкой UNC-путей. Давайте рассмотрим, как можно эффективно справиться с этой задачей.

Проблема

Вы столкнулись с проблемой при запуске пакетного файла, который должен удалять файлы старше N дней из указанного UNC-пути. Ошибка, указывающая на то, что "UNC File Paths are not supported" (UNC-пути не поддерживаются), возникает из-за того, что некоторые команды Windows не работают напрямую с UNC-путями. Однако есть способ обойти это ограничение с помощью команд PUSHD и POPD, которые создают временную папку для работы.

Решение

Вот пример кода, который поможет вам удалить файлы старше 180 дней из UNC-пути и избежать ошибок:

SET "log=%temp%\delete.log"
SET "target.dir=\\network\file\path"

ECHO %date%-%time% - Файлы старше 6 месяцев, которые будут удалены >> "%log%"

PAUSE
2 >> "%log%" pushd "%target.dir%"
>> "%log%" 2>&1 net use %CD:~0,2%
ECHO %date%-%time% - Удаление файлов старше 6 месяцев >> "%log%"
Forfiles /S /D -180 /M *.* /C "cmd /C >> ""%log%"" 2>&1 Del @path"
popd

Объяснение кода

  1. Определение переменных: Вы используете синтаксис SET "variable=value" для определения переменных. Это помогает избежать проблем с пробелами в значениях.

  2. Использование PUSHD: Команда PUSHD позволяет работать с UNC-путями, создавая временную папку на одном из дисков. Это позволяет избежать ограничений, связанных с прямым доступом к UNC.

  3. Команда Forfiles: Используется для поиска файлов, которые соответствуют заданным критериям. В данном примере удаляются файлы, которые старше 180 дней.

  4. Перенаправление и логирование: Вывод команд и ошибки перенаправляются в лог-файл для последующего анализа. Это достигается с помощью >> и 2>&1, которые обеспечивают запись стандартного вывода и ошибок в файл.

  5. Использование POPD: Завершает сеанс, созданный PUSHD, восстанавливая ранее активный каталог.

Заключение

Используя предложенный подход, вы сможете эффективно удалять файлы старше N дней из UNC-путей без возникновения ошибок. Это решение обеспечит надежную работу, а логирование поможет отслеживать процесс удаления. Важно всегда тестировать ваши скрипты на тестовых каталогах, чтобы избежать случайной потери данных.

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

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