Вопрос или проблема
У меня есть макрос, который извлекает данные для файлов в заданном пути, старше 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
Объяснение кода
-
Определение переменных: Вы используете синтаксис
SET "variable=value"
для определения переменных. Это помогает избежать проблем с пробелами в значениях. -
Использование PUSHD: Команда
PUSHD
позволяет работать с UNC-путями, создавая временную папку на одном из дисков. Это позволяет избежать ограничений, связанных с прямым доступом к UNC. -
Команда Forfiles: Используется для поиска файлов, которые соответствуют заданным критериям. В данном примере удаляются файлы, которые старше 180 дней.
-
Перенаправление и логирование: Вывод команд и ошибки перенаправляются в лог-файл для последующего анализа. Это достигается с помощью
>>
и2>&1
, которые обеспечивают запись стандартного вывода и ошибок в файл. -
Использование POPD: Завершает сеанс, созданный
PUSHD
, восстанавливая ранее активный каталог.
Заключение
Используя предложенный подход, вы сможете эффективно удалять файлы старше N дней из UNC-путей без возникновения ошибок. Это решение обеспечит надежную работу, а логирование поможет отслеживать процесс удаления. Важно всегда тестировать ваши скрипты на тестовых каталогах, чтобы избежать случайной потери данных.