![]() |
Помогите с рутинным перемещением файлов.
Доброго времени суток.
Столкнулся с затруднениями при попытке создания батника для рутинных созданий и перемещений файлов. До этого создавал батничек, который подключался по sftp и забирал файлы из определенной папки. ( Мне не хватило сил всё это объединить в один, поэтому я разбил на 3 батника) 1) Код:
cd WinSCP Код:
option echo off Код:
move диск:\папка\папка\папка\*.расширение файлов диск:\папка\папка\ тут я просто перемещаю расшифрованные файлы в нужную мне папку для обработки в вебарме Мне теперь необходимо скачивать файлы разных форматов и на разные даты (обычно текущая + след. день) т.е я не смог придумать как цеплять все файлы и не дублировать потом их при обработке Плюс нужно создавать 2 архивные папки на своем диске + на сетевом. Т.е выглядит это теперь так: Подключась по sftp и должен забирать файлы с разными датами. Например, с пятницы (вечер) и до понедельника (утро) ( Есть ли какая-нибудь возможность их забирать и не дублировать? Проверка на дубликаты) Создавать архивную папку на актуальную дату ( Не получилось создать именно в нужной мне папке на сетевом диске) почему-то дублирует просто путь и создает папку не в той директории Был бы очень признателен, если бы вы помогли мне хотя бы с частью этой рутины. Заранее спасибо и прошу прощения , если мой вопрос покажется кому-то немного глупым :) |
Skywalker875,
во-первых так конечно дела не делаются: Я вот изобретаю велосипед, сделайте все за меня, а я звоночек повешу. Надо самому разобраться и вникнуть, ну да ладно, смотрю что-то делали. во-вторых давайте четкое условие, не очень понятно что откуда копировать и куда и что архивировать, давайте четко ------ есть сервер (шара, ...) надо (например с помощью планировщика) в определенные дни запускать bat который - скачает определенные файлы в папку, в которой уже есть какие-то файлы - проверит какие новее из таких же по имени и только те и оставит в этой папке (точнее по поводу дублей, тут непонятно как они могут получаться) - создаст архив этой папки на другом диске - создаст архив этой папки и отправит его на сервер (шару, ...) ------ подкорректируйте и выдайте понятное условие, тогда помощь будет и быстрее и точнее. |
1) Запускаю WINSCP
2) Подключаюсь к серверу 3) В этой папке лежат множество файлов с различными названиями ( мне нужно каждый день забирать файл на текущую дату и не дублировать их потом при выгрузке в вебарм) 4) Я файлы, который забрал с сервера перекидываю в папку на сетевой диск в папку IN и дублирую эти же файлы в архивные папки на другой сетевой диск N:\Standart\in N:\Standart\Archive\In\10\20201727\ (создаю каждый раз новую папку на актуальную дату, т.к файлы приходят каждый день и делаю копию в архиве на случай востребования каких-то файлов) H:\Standart\10\20201027\ (это диск для других людей, которые в свою очередь тоже что-то обрабатывают) 5) Захожу в вебарм и подгружаю файлы ( он не все обрабатывает, какая-то часть остается и уходит из папки N:\Standart\in) Т.е в идеале мне нужно сказать батнику, чтобы он брал файлы на актуальную дату и не дублировал их на старые даты + создавал новые папки на актуальную дату и перемещал файлы. Очень волнует процесс автоматизации или частичной автоматизации именно скачивания и перемещения / копирования файлов. Как-то так, мне просто хотелось узнать совет, как все это дело попытаться настроить, т.к я не знаю как ухватиться за автоматическую подгрузку файлов. Ведь названия меняются , как и дата. Т.е файлы приходят каждый день и в течение дня всю неделю. Я их подгружаю руками каждый раз, когда захожу. Чтобы не дублировать их и избежать в дальнейшем проблем, можно сделать какой-то индикатор? Или загружать сначала всё в одну папку и делать проверку между этой папкой и той, что на сервере и подгружать те, которых нет. Поэтому и обратился к Вам, людям с большим опытом чем у меня в этом деле. |
можете мне по части дублей детальнее разъяснить?
если файл имеет одно и то же имя, то в следующий раз он или не будет копироваться или перепишет старый если файл имеет другое имя, но равен такому же за прошлый день по содержимому и размеру, то вариантов несколько: - можно гарантированно забирать старый файл раньше чем появится новый, тогда нужно точно знать временнЫе рамки появления файла и запуска bat - можно забирать из папки самые новые по дате изменения файлы, если более старые не актуальны очень слабое условие, много темных пятен: -что за файлы, это архивы или просто какие-то файлы -какая маска файлов, несколько вариантов имен файлов, есть ли дата в имени -дубли одного и того же файла уже есть на сервере и нужно выбрать самый свежий -как часто появляются файлы на сервере, чтобы понимать в какое время делать запуск bat раз в сутки из планировщика Цитата:
Код:
@echo off можно скачивать нужное по маске и отбирать свежее из скачанного относительно ее же Цитата:
в любом случае мало входящих данных. |
Как я и говорил тут файлы приходят "особого" формата. Меня в принципе устроит упростить хотя бы часть с загрузкой в папку для приема файлов (последующая выгрузка в программе) и копированием в архивную папку (тут я ничего не трогаю и просто храню файлы до востребования)
Разъясняю по части дублей. Я закидываю в папку , как видно на скриншоте (in) оттуда забираются в программу. Потом я чищу in ручками, чтобы потом не подгружать повторно и чтобы просто не мешались. Просто там всякая различная информация по картам и прочим "радостям" , поэтому не хочется дублировать запросы. В принципе мне не нужно , чтобы 24/7 отрабатывался скрипт. Мне будет гораздо легче запускать его руками 2-3 раза в день и потом выгружать в программу. Все равно там файлы подгружают 24/7 и не получится их забирать и обрабатывать постоянно. Плюс на сервере нельзя неактуальные файлы убирать в архив, я бы тогда просто прогонял старый скрипт, просто указав вместо расширений , чтобы забирал все файлы. Поэтому я и зашел в тупик( https://i.imgur.com/SQoO35D.png https://i.imgur.com/JRPgH7K.png |
Цитата:
хорошо, разделю и опишу чтобы понятно было Код:
@echo off на рабочем столе создаем папку "C:\Users\?\Desktop\1", если таковой не было подключаемся к серверу устанавливаем директорию на сервере, у меня это: "/home/?" устанавливаем локальную директорию, мы ее создали выше: "C:\Users\?\Desktop\1" забираем из папки "Papka" в директории "/home/?" все файлы *.txt выходим с сервера с помощью архиватора 7z архивируем всю папку "C:\Users\?\Desktop\1" в архив на рабочий стол с помощью архиватора 7z архивируем всю папку "C:\Users\?\Desktop\1" в архив на шару "\\%ComputerName%\Backup" ------ начните с малого, это уже автоматизация и все в одном bat, дальше будем докручивать по надобности. |
Спасибо за пример и объяснения в нем, но я попробовал и у меня не получилось:)
Код:
@echo off чтобы он переходил по указанному пути : /u00/files/doc/in/cs/unknown и забирал все файлы из этой папки и перекладывал те файлы, что скачал в папку архив. Почему-то выдает ошибку error listing directory '/unknown' No such file or directory. Error code :2 Error message from server : No such file Подскажете, где я накосячил? Или альтернативы, просто я нашел только эти команды на сайте самого winscp. Заранее спасибо) Спасибо за пример и объяснения в нем, но я попробовал и у меня не получилось:) Код:
@echo off чтобы он переходил по указанному пути : /u00/files/doc/in/cs/unknown и забирал все файлы из этой папки и перекладывал те файлы, что скачал в папку архив. Почему-то выдает ошибку error listing directory '/unknown' No such file or directory. Error code :2 Error message from server : No such file Подскажете, где я накосячил? Или альтернативы, просто я нашел только эти команды на сайте самого winscp. Заранее спасибо) |
Цитата:
------ я сомневаюсь уже что вы хоть что-то делали и что-то работало, глядя на все безобразие выше, точно следует продолжать или вы сначала изучите работу WinSCP, соединение по SFTP, команды WinSCP и cmd вам с этим работать, что-то менять и дорабатывать, если я сейчас составлю код идеально соответствующий вашим путям, ключам и пр.. то как вы будете выкручиваться, когда например слетит паблик ключ, авторизация по нему или с другого пользователя надо выйти, да мало ли чего. вот например, 11-я строка моего кода, МОЕГО, с МОИМИ данными Код:
"open sftp://Юзер:Пароль@localhost:Порт/ -hostkey=""ssh-ed25519 255 БуквыЦифры/БуквыЦифры=""" ^ |
Skywalker875,
ладно, размещу тут шпаргалку для вас и страждующих по этой теме, хоть к направлению раздела в котором мы находимся это мало как касается, разве что код в bat файле. # Создать папки: # - на рабочем столе: C:\Users\Mario\Desktop\lPapka # - на сервере: /home/Mario/sPapka # с одинаковым содержимым: │ file1.txt │ file2.txt │ file3.pdf │ file4.zip │ ├───sdir1 │ aaa.txt │ ├───sdir2 │ bbb.txt Код:
@echo on (а то еще обиды пойдут - не захотел помочь, а зачем начинал ...) |
Время: 09:57. |
Время: 09:57.
© OSzone.net 2001-