Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Помощь с написанием Bat. Перемещение и удаление файлов и папок старше N дней.

Ответить
Настройки темы
CMD/BAT - [решено] Помощь с написанием Bat. Перемещение и удаление файлов и папок старше N дней.

Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


Подскажите пожалуйста, как реализовать следующую задачу:
Есть сетевое хранилище. В нем куча папок. В данный момент интересуют 5 из них.
4 папки используются для сканов с мфу, то есть пользователь отсканил документ, мфу его положил в свою папку(файлы могут быть как pdf так и jpg, все зависит от того как настроили при сканировании)
В этих 4-х папка не должны оставаться файлы старше 3-х дней. Отсканировал-забрал, не забрал файл удалился.
Нужно, чтоб планировщик запускал bat файл который, из указанной папки все файлы старше трех дней переносил в другую папку, затем из этой "другой папки" удалял все файлы старше 20 дней. При этом в папке могут быть созданы не только файлы с изображениями, так же там могу создать и папку, которую в свою очередь тоже нужно сначала переместить а уже потом удалить с теме же временными рамками что и у файлов. Для этого был написан вот такой батник:

FORFILES /p "W:\Scan_Buh" /S /D -3 /C "cmd /c move @path "W:\EverybodyOld\Scan_Buh\""
:: Переносим все файлы и папки старше 3-х дней из папки Scan_Buh в папку EverybodyOld\Scan_Buh\
FORFILES /p "W:\EverybodyOld\Scan_Buh" /S /D -20 /C "cmd /c del @path /f /q"
:: Удаляем все файлы старше 20-и дней из папки Scan_Buh
FORFILES /p "W:\EverybodyOld\Scan_Buh" /S /C "cmd /c rd @path"
:: Удаляем все пустые папки
FORFILES /p "W:\Scan_Manager" /S /D -3 /C "cmd /c move @path "W:\EverybodyOld\Scan_Manager\""
:: Переносим все файлы и папки старше 3-дней из папки Scan_Manager в папку EverybodyOld\Scan_Manager\
FORFILES /p "W:\EverybodyOld\Scan_Manager" /S /D -20 /C "cmd /c del @path /f /q"
:: Удаляем все файлы старше 20-и дней из папки Scan_Manager
FORFILES /p "W:\EverybodyOld\Scan_Manager" /S /C "cmd /c rd @path"
:: Удаляем все пустые папки


Аналогично для остальных двух папок, меняется только путь к ним.

Сейчас добавилась еще одна папка. В ней идет обмен документами, а так же несколько папок с которыми работают все. Тут может быть куча самых различных фалов, папок, подпапок... Из этой папке так же нужно перемещать все файлы\папки старше n дней в другую папку, затем по истечение n дней удалять из другой папки. НО есть несколько папок (в них соответственно файлы) которые трогать не нужно. К примеру есть w:\test в ней еще папки 1,2,3,4,5,6, и просто фалы лежащие в корне(кол-во файлов и папок может быть какое угодно и с каким угодно расширением), нужно чтоб всё что старше n дней переместилось в w:\arhiv\test кроме папки и всего содержимого в папка 2, 4,5 эти папки просто должны пропускаться (у них есть имя которое не изменяется, ведется работа только внутри этих папок) а потом уже из папки w:\arhiv\test так же все что старше 20 дней удалялось и файлы и папки в том числе.

Как сделать исключение по названию папки? Чтоб при том же перемещении на определенную папку просто не обращалось внимания.
У Forfiles есть ключ /м но это маска с которой он работает и не исключает.
Все это на автомате, без каких либо запросов и ввода доп информации, задание ночью отработало и всё.
Помогите разобраться и дополнить батник, а возможно и переделать совсем и оптимизировать.

Отправлено: 17:10, 03-12-2015

 

Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата Shurik006:
она моментально переносит большие файлы с диска на диск (=проводниковое вырезать/вставить). »
1. Нет. Это ни разу не «проводниковое вырезать/вставить». Проводник работает по совсем иным принципам.
2. И с раздела на раздел перенос больших файлов никак не может работать быстро (если только у Вас не SSD или «большие файлы» в реальности легко помещаются целиком в кэш накопителя).

Цитата Shurik006:
Т.е. она сначала копирует, затем удаляет »
Нет, не должно такого быть. exclude — это честный exclude.
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:47, 26-02-2019 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1171
Благодарности: 487

Профиль | Отправить PM | Цитировать


Цитата Shurik006:
Т.е. она сначала копирует, затем удаляет и эта операция происходит дольше. »
В спецификации утилиты robocopy сказано:
Цитата:
/MOV Moves files (that is, deletes source files after copying).
/MOVE Moves files and directories (that is, deletes source files and directories after copying).
Цитата:
In some situations, you may want to move files instead of copying them, especially if disk space is at a premium on your network. You can use the /MOVE switch to delete source files from the source directory tree after they have been successfully copied to the destination. /MOVE also deletes empty directories from the source directory tree.
Even with /MOVE specified, however, Robocopy deletes only those source files that it successfully copies to the destination. There is no guarantee that a skipped source file is identical to its corresponding destination file (even if the file times and sizes are identical) until immediately following a successful copy. For that reason, some files and directories (such as skipped Same files) might remain in the source tree even when /MOVE is specified. You must determine whether to delete the remaining entries, and do so manually.
Т.е. это утилита именно копирования, а удаление происходит уже после успешного копирования и никак иначе.
- Утром деньги, вечером стулья
- А можно наоборот?
- Можно, но деньги вперед!

-------
scio me nihil scire. Ѫ


Последний раз редактировалось YuS_2, 27-02-2019 в 06:00.

Это сообщение посчитали полезным следующие участники:

Отправлено: 05:54, 27-02-2019 | #12


Новый участник


Сообщения: 5
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Iska:
2. И с раздела на раздел перенос больших файлов никак не может работать быстро (если только у Вас не SSD или «большие файлы» в реальности легко помещаются целиком в кэш накопителя). »
Там по iscsi хранилище, скорость действительно очень большая, поэтому перенос даже 2Гб файла происходил быстро.

Цитата Iska:
Нет, не должно такого быть. exclude — это честный exclude. »
Да, прошу прощения, я ошибся. xa работает как надо.

Цитата YuS_2:
Т.е. это утилита именно копирования, а удаление происходит уже после успешного копирования и никак иначе. »
Да, всё понял. Спасибо.
Значит навыдумывал зачем-то

Отправлено: 10:21, 27-02-2019 | #13


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


YuS_2, разве речь не про исключение файлов шла?

Отправлено: 19:03, 27-02-2019 | #14


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1171
Благодарности: 487

Профиль | Отправить PM | Цитировать


Цитата Iska:
разве речь не про исключение файлов шла? »
Не совсем... там просили объяснить "пару моментов", а второй вопрос возник из первого.
Т.е. человек начал отталкиваться от этого:
Цитата Shurik006:
В чистом виде переноса /move (без доп. условий) она моментально переносит большие файлы с диска на диск »
А это неверно, в силу принципа работы самой утилиты и то, что я процитировал из спецификации, как раз, этот принцип описывает.
Никакими ключами этот алгоритм изменить невозможно. Ну, т.е. получить чистый move, даже в пределах одного диска, не получится, именно copy, а затем delete. Просто уточнил.

-------
scio me nihil scire. Ѫ


Последний раз редактировалось YuS_2, 28-02-2019 в 07:26.


Отправлено: 07:19, 28-02-2019 | #15


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата YuS_2:
А это неверно, в силу принципа работы самой утилиты »
Это неверно в силу того принципа, что это в любом случае означает чтение-запись содержимого, а не просто создание/удаление записей в разных каталогах одного и того же раздела. По каким бы принципам ни работала утилита.

Отправлено: 06:10, 05-03-2019 | #16


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1171
Благодарности: 487

Профиль | Отправить PM | Цитировать


Цитата Iska:
Это неверно в силу того принципа, что это в любом случае означает чтение-запись содержимого »
А я что сказал?
Физический перенос данных в пределах одного диска не осуществляется, при выполнении операции move, а в утилите просто вводит в заблуждение схожий по названию ключ... это и имелось в виду.
Если заняться подробным описанием принципа работы файловой системы (как осуществляется перенос файлов в пределах одного диска, на разные диски, копирование, удаление, MFT таблицы и т.д.), это в пару строк не уместится, потому и не стал даже пытаться... ну, а если вдруг кому-то интересно, в интернете же можно поискать и почитать.

Добавлено:
Цитата Iska:
По каким бы принципам ни работала утилита. »
А вот это, как раз, важно. Если утилита умеет переносить файлы, т.е. пересоздавать ссылки в MFT таблице, то это уже не копирование файла с последующим удалением исходных данных, а именно перенос. И Robocopy, как раз, работает по принципу: сначала копируем данные, затем удаляем их, никаких переносов/move, независимо от исходного и конечного местоположения данных, она не делает.

-------
scio me nihil scire. Ѫ


Последний раз редактировалось YuS_2, 05-03-2019 в 13:15.


Отправлено: 10:34, 05-03-2019 | #17


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата YuS_2:
А я что сказал? »
YuS_2, вот и разобрались .

Цитата YuS_2:
А вот это, как раз, важно. Если утилита умеет переносить файлы, т.е. пересоздавать ссылки в MFT таблице, то это уже не копирование файла с последующим удалением исходных данных, а именно перенос. И Robocopy, как раз, работает по принципу: сначала копируем данные, затем удаляем их, никаких переносов/move, независимо от исходного и конечного местоположения данных, она не делает. »
А я что сказал ? Даже если б умела в move — на разных разделах никак не получится.

Отправлено: 14:49, 05-03-2019 | #18


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1171
Благодарности: 487

Профиль | Отправить PM | Цитировать


Цитата Iska:
А я что сказал ? Даже если б умела в move — на разных разделах никак не получится. »
Да-да, в этом смысле однозначно, принцип не имеет значения

-------
scio me nihil scire. Ѫ


Отправлено: 18:36, 05-03-2019 | #19


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата YuS_2:
Да-да, в этом смысле однозначно, принцип не имеет значения »
Так выпьем же за понимание!

Отправлено: 00:18, 06-03-2019 | #20



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Помощь с написанием Bat. Перемещение и удаление файлов и папок старше N дней.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
2012 R2 - [решено] Удаление файлов старше 100 дней DJ Mogarych Windows Server 2012/2012 R2 6 07-06-2014 02:16
Любой язык - [решено] Удаление файлов старше N дней DOCznet Скриптовые языки администрирования Windows 2 27-09-2012 11:42
Любой язык - Удаление файлов старше 5 дней кроме указанного по имени. Joni Скриптовые языки администрирования Windows 6 11-07-2012 11:18
VBS/WSH/JS - [решено] Удаление файлов по сети старше 7 дней, оставлять не менее 10 файлов white155 Скриптовые языки администрирования Windows 6 04-01-2012 00:42
Прочее - удаление файлов старше 10 дней admin666 Общий по Linux 1 23-07-2009 19:09




 
Переход