Вопрос или проблема
Я пытаюсь написать пакетный скрипт, который будет автоматически запускаться каждый день для выполнения следующих действий:
- Переместить файлы старше 2 дней из главного каталога (Jason) в архивный каталог.
- Сжать файлы в архивном каталоге, которые старше 1 недели, и удалить файлы из этого каталога, которые старше 6 месяцев.
- Я хочу запустить этот скрипт из другого каталога (не из каталога, в котором находятся файлы).
Я написал следующий скрипт, но он работает неправильно.
REM переместить файлы старше 2 дней в архивный каталог robocopy D:\Agentrics\integration\incoming\Jason D:\Agentrics\integration\incoming\Jason\archive /MOV /MINAGE:2
Вопросы:
- Как я могу изменить команду ниже, чтобы сжать файлы старше 1 недели?
- Возможно ли, чтобы сжатые файлы имели ту же дату и время создания, что и оригинальные файлы?
REM сжать все файлы в архивном каталоге FOR %%A IN (*.TXT*, *.cpi*) DO "C:\Program Files\WinRAR\WinRAR.exe" a -r "%%~nA.zip" "%%A" FOR %%A IN (*.TXT, *.cpi) DO DEL "D:\Agentrics\integration\incoming\Jason\archive\.cpi*" "%%A" REM Удалить все файлы в архивном каталоге, которые старше 6 месяцев forfiles /p D:\Agentrics\integration\incoming\Jason\archive /s /m *.* /d -500 /c "cmd /c del /q @path"
На вашем месте я бы не использовал цикл for для этого. Я бы предпочел способ, предложенный @harper. Но все же, вот как вы хотели:
REM переместить файлы старше 2 дней в архивный каталог
forfiles /P D:\Agentrics\integration\incoming\Jason /M *.txt /S /D -2 /C "cmd /c move @file D:\Agentrics\integration\incoming\Jason\archive"
forfiles /P D:\Agentrics\integration\incoming\Jason /M *.cpi /S /D -2 /C "cmd /c move @file D:\Agentrics\integration\incoming\Jason\archive"
REM сжать все файлы в архивном каталоге
for /f "tokens=*" %%a in ('forfiles /p D:\Agentrics\integration\incoming\Jason\archive /s /d -7') do "C:\Program Files\WinRAR\WinRAR.exe" a -r "%%~nA.zip" "%%a"
REM Удалить все файлы в архивном каталоге, которые старше 6 месяцев
for /f "tokens=*" %%a in ('forfiles /p D:\Agentrics\integration\incoming\Jason\archive /s /d -183') do del D:\Agentrics\integration\incoming\Jason\archive\%%a /y
Ответ или решение
Для решения задачи автоматизации управления файлами с помощью пакетных файлов, важно тщательно спроектировать сценарий, который будет выполнять три основные задачи: перемещение, архивирование и удаление файлов. Давайте разберем каждую из этих задач и оптимизируем предоставленный код.
Задача 1: Перемещение файлов старше 2 дней в архивную директорию
Вы можете использовать команду forfiles
, чтобы переместить файлы, которые старше 2 дней, в архив. В вашем случае целесообразно использовать один сценарий для всех типов файлов.
@echo off
REM Перемещение файлов старше 2 дней в архивную директорию
forfiles /P D:\Agentrics\integration\incoming\Jason /M *.* /D -2 /C "cmd /c move @file D:\Agentrics\integration\incoming\Jason\archive"
Задача 2: Архивирование файлов старше 1 недели и удаление файлов старше 6 месяцев
Для архивирования файлов старше 7 дней мы можем вновь использовать forfiles
для получения списка файлов и инструмента WinRAR для их архивирования. Обратите внимание, что автоматическое использование WinRAR не позволяет сохранить дату создания. Однако, если это критично, вы можете рассмотреть выполнение дополнительных операций с файлами после их архивирования.
REM Архивация всех файлов в архивной директории старше 7 дней
forfiles /P D:\Agentrics\integration\incoming\Jason\archive /M *.* /D -7 /C "cmd /c \"C:\Program Files\WinRAR\WinRAR.exe\" a -r \"D:\Agentrics\integration\incoming\Jason\archive\@fname.zip\" \"@path\""
REM Удаление всех файлов старше 6 месяцев
forfiles /P D:\Agentrics\integration\incoming\Jason\archive /M *.* /D -183 /C "cmd /c del /q @path"
Задача 3: Запуск сценария из другой директории
Убедитесь, что скрипт запускается через планировщик задач Windows. Это позволит запускать его в заданное время независимо от текущей директории.
Вопросы и ответы
-
Как изменить команду для архивирования файлов старше 1 недели?
В приведенном выше коде используетсяforfiles
для поиска и архивирования файлов старше 7 дней. -
Возможно ли, чтобы архивированные файлы имели ту же дату создания и время, что и оригинальные файлы?
WinRAR не поддерживает сохранение даты создания файла при архивировании. Однако можно воспользоваться сторонними утилитами, если это критически важно.
Заключение
Таким образом, приведенный выше пакетный файл поможет вам настроить автоматическую архивацию, перемещение и управление старыми файлами. Важно периодически проверять работу скрипта и, возможно, адаптировать его к изменяющимся требованиям вашей организации.
При помощи этого подхода вы сможете поддерживать порядок в файловой структуре вашей компании, оптимизируя процесс работы с данными.