|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Помогите с рутинным перемещением файлов. |
|
CMD/BAT - Помогите с рутинным перемещением файлов.
|
Новый участник Сообщения: 4 |
Доброго времени суток.
Столкнулся с затруднениями при попытке создания батника для рутинных созданий и перемещений файлов. До этого создавал батничек, который подключался по sftp и забирал файлы из определенной папки. ( Мне не хватило сил всё это объединить в один, поэтому я разбил на 3 батника) 1) 2) option echo off option batch on option confirm off open sftp://login@ip/ -hostkey="тут hostkey" -privatekey="тут файлик с privatekey" cd "/OUT" переходит в нужную директорию, где лежат 2 зашифрованных файла get "/OUT/*.расширение файлов" "диск:\папка\папка\папка\" скачивает эти 2 зашифрованных файла и перемещает их в нужную мне папку для последующей расшифровки mv "*.enc" "/OUT/ARC/*" и убирает те 2 файла в архив, чтобы случайно не забрать их на след. день exit move диск:\папка\папка\папка\*.расширение файлов диск:\папка\папка\ тут я просто перемещаю расшифрованные файлы в нужную мне папку для обработки в вебарме Мне теперь необходимо скачивать файлы разных форматов и на разные даты (обычно текущая + след. день) т.е я не смог придумать как цеплять все файлы и не дублировать потом их при обработке Плюс нужно создавать 2 архивные папки на своем диске + на сетевом. Т.е выглядит это теперь так: Подключась по sftp и должен забирать файлы с разными датами. Например, с пятницы (вечер) и до понедельника (утро) ( Есть ли какая-нибудь возможность их забирать и не дублировать? Проверка на дубликаты) Создавать архивную папку на актуальную дату ( Не получилось создать именно в нужной мне папке на сетевом диске) почему-то дублирует просто путь и создает папку не в той директории Был бы очень признателен, если бы вы помогли мне хотя бы с частью этой рутины. Заранее спасибо и прошу прощения , если мой вопрос покажется кому-то немного глупым ![]() |
|
Отправлено: 10:30, 26-10-2020 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать Skywalker875,
во-первых так конечно дела не делаются: Я вот изобретаю велосипед, сделайте все за меня, а я звоночек повешу. Надо самому разобраться и вникнуть, ну да ладно, смотрю что-то делали. во-вторых давайте четкое условие, не очень понятно что откуда копировать и куда и что архивировать, давайте четко ------ есть сервер (шара, ...) надо (например с помощью планировщика) в определенные дни запускать bat который - скачает определенные файлы в папку, в которой уже есть какие-то файлы - проверит какие новее из таких же по имени и только те и оставит в этой папке (точнее по поводу дублей, тут непонятно как они могут получаться) - создаст архив этой папки на другом диске - создаст архив этой папки и отправит его на сервер (шару, ...) ------ подкорректируйте и выдайте понятное условие, тогда помощь будет и быстрее и точнее. |
Последний раз редактировалось alpap, 27-10-2020 в 13:06. Отправлено: 12:40, 27-10-2020 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 4
|
Профиль | Отправить PM | Цитировать 1) Запускаю WINSCP
2) Подключаюсь к серверу 3) В этой папке лежат множество файлов с различными названиями ( мне нужно каждый день забирать файл на текущую дату и не дублировать их потом при выгрузке в вебарм) 4) Я файлы, который забрал с сервера перекидываю в папку на сетевой диск в папку IN и дублирую эти же файлы в архивные папки на другой сетевой диск N:\Standart\in N:\Standart\Archive\In\10\20201727\ (создаю каждый раз новую папку на актуальную дату, т.к файлы приходят каждый день и делаю копию в архиве на случай востребования каких-то файлов) H:\Standart\10\20201027\ (это диск для других людей, которые в свою очередь тоже что-то обрабатывают) 5) Захожу в вебарм и подгружаю файлы ( он не все обрабатывает, какая-то часть остается и уходит из папки N:\Standart\in) Т.е в идеале мне нужно сказать батнику, чтобы он брал файлы на актуальную дату и не дублировал их на старые даты + создавал новые папки на актуальную дату и перемещал файлы. Очень волнует процесс автоматизации или частичной автоматизации именно скачивания и перемещения / копирования файлов. Как-то так, мне просто хотелось узнать совет, как все это дело попытаться настроить, т.к я не знаю как ухватиться за автоматическую подгрузку файлов. Ведь названия меняются , как и дата. Т.е файлы приходят каждый день и в течение дня всю неделю. Я их подгружаю руками каждый раз, когда захожу. Чтобы не дублировать их и избежать в дальнейшем проблем, можно сделать какой-то индикатор? Или загружать сначала всё в одну папку и делать проверку между этой папкой и той, что на сервере и подгружать те, которых нет. Поэтому и обратился к Вам, людям с большим опытом чем у меня в этом деле. |
Отправлено: 13:49, 27-10-2020 | #3 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать можете мне по части дублей детальнее разъяснить?
если файл имеет одно и то же имя, то в следующий раз он или не будет копироваться или перепишет старый если файл имеет другое имя, но равен такому же за прошлый день по содержимому и размеру, то вариантов несколько: - можно гарантированно забирать старый файл раньше чем появится новый, тогда нужно точно знать временнЫе рамки появления файла и запуска bat - можно забирать из папки самые новые по дате изменения файлы, если более старые не актуальны очень слабое условие, много темных пятен: -что за файлы, это архивы или просто какие-то файлы -какая маска файлов, несколько вариантов имен файлов, есть ли дата в имени -дубли одного и того же файла уже есть на сервере и нужно выбрать самый свежий -как часто появляются файлы на сервере, чтобы понимать в какое время делать запуск bat раз в сутки из планировщика Цитата Skywalker875:
@echo off "C:\Program Files (x86)\WinSCP\WinSCP.com" ^ /command ^ "open sftp://?eg-user?:?passw?@?host?:?port?/ -hostkey=""ssh-ed...""" ^ "cd /home/?eg-user?" ^ "lcd C:\Users\?eg-user?\Desktop\1" ^ "get file1.ext" ^ "get file2.ext" ^ "exit" 7z a "arch.zip" "C:\Users\?eg-user?\Desktop\1" 7z a "\\%ComputerName%\Backup\arch.zip" "C:\Users\?eg-user?\Desktop\1" exit /b можно скачивать нужное по маске и отбирать свежее из скачанного относительно ее же Цитата Skywalker875:
в любом случае мало входящих данных. |
||
Отправлено: 02:14, 28-10-2020 | #4 |
Новый участник Сообщения: 4
|
Профиль | Отправить PM | Цитировать Как я и говорил тут файлы приходят "особого" формата. Меня в принципе устроит упростить хотя бы часть с загрузкой в папку для приема файлов (последующая выгрузка в программе) и копированием в архивную папку (тут я ничего не трогаю и просто храню файлы до востребования)
Разъясняю по части дублей. Я закидываю в папку , как видно на скриншоте (in) оттуда забираются в программу. Потом я чищу in ручками, чтобы потом не подгружать повторно и чтобы просто не мешались. Просто там всякая различная информация по картам и прочим "радостям" , поэтому не хочется дублировать запросы. В принципе мне не нужно , чтобы 24/7 отрабатывался скрипт. Мне будет гораздо легче запускать его руками 2-3 раза в день и потом выгружать в программу. Все равно там файлы подгружают 24/7 и не получится их забирать и обрабатывать постоянно. Плюс на сервере нельзя неактуальные файлы убирать в архив, я бы тогда просто прогонял старый скрипт, просто указав вместо расширений , чтобы забирал все файлы. Поэтому я и зашел в тупик( https://i.imgur.com/SQoO35D.png https://i.imgur.com/JRPgH7K.png |
|
Отправлено: 11:44, 28-10-2020 | #5 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать Цитата Skywalker875:
хорошо, разделю и опишу чтобы понятно было @echo off set "d1=C:\Users\?\Desktop\1" set "arexe=C:\Program Files\7-Zip\7z.exe" set "shr=\\%ComputerName%\Backup" set "namear=arch.zip" if not exist "%d1%" md "%d1%" "C:\Program Files (x86)\WinSCP\WinSCP.com" ^ /command ^ "open sftp://?:?@?:?/ -hostkey=""ssh-ed?=""" ^ "cd /home/?" ^ "lcd C:\Users\?\Desktop\1" ^ "get Papka/*.txt" ^ "exit" "%arexe%" a "%namear%" "%d1%" "%arexe%" a "%shr%\%namear%" "%d1%" exit /b на рабочем столе создаем папку "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, дальше будем докручивать по надобности. |
|
Отправлено: 00:01, 29-10-2020 | #6 |
Новый участник Сообщения: 4
|
Профиль | Отправить PM | Цитировать Спасибо за пример и объяснения в нем, но я попробовал и у меня не получилось
![]() @echo off "C:\Users\?\Desktop\test1\Winscp\WinSCP.com" ^ /command ^ "open sftp://?:?@?:?/ -hostkey=""ssh-ed?=""" ^ "cd /u00/files/doc/in/cs/unknown" ^ / переход в директорию "get /unknown/*.* | arhive" "C:\Users\?\Desktop\1" / скачивание всех файлов в этой папке, за исключением папки arhiv "mv*.* " "//u00/files/doc/in/cs/unknown/archive*" / перемещение скачанных файлов в папку архив "exit" чтобы он переходил по указанному пути : /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 "C:\Users\?\Desktop\test1\Winscp\WinSCP.com" ^ /command ^ "open sftp://?:?@?:?/ -hostkey=""ssh-ed?=""" ^ "cd /u00/files/doc/in/cs/unknown" ^ / переход в директорию "get /unknown/*.* | arhive" "C:\Users\?\Desktop\1" / скачивание всех файлов в этой папке, за исключением папки arhiv "mv*.* " "//u00/files/doc/in/cs/unknown/archive*" / перемещение скачанных файлов в папку архив "exit" чтобы он переходил по указанному пути : /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. Заранее спасибо) |
Отправлено: 15:31, 29-10-2020 | #7 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать Цитата Skywalker875:
------ я сомневаюсь уже что вы хоть что-то делали и что-то работало, глядя на все безобразие выше, точно следует продолжать или вы сначала изучите работу WinSCP, соединение по SFTP, команды WinSCP и cmd вам с этим работать, что-то менять и дорабатывать, если я сейчас составлю код идеально соответствующий вашим путям, ключам и пр.. то как вы будете выкручиваться, когда например слетит паблик ключ, авторизация по нему или с другого пользователя надо выйти, да мало ли чего. вот например, 11-я строка моего кода, МОЕГО, с МОИМИ данными |
|
Отправлено: 15:44, 29-10-2020 | #8 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать 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 set "ldir=C:\Users\Mario\Desktop" set "lp=lPapka" set "sdir=/home/Mario" set "sp=sPapka" set "sback=sBackup" set "inclget=*.txt; *.pdf" set "exclget=file2.*; *dir2/" set "inclput=file*" set "exclput=file3.*; *dir1/; sdir*/" "C:\Program Files (x86)\WinSCP\WinSCP.com" ^ /command ^ "open sftp://Mario:Passw@192.168.1.100:22/ -hostkey=""ssh-...""" ^ "lcd %ldir%" ^ "cd %sdir%" ^ "get -filemask=""%inclget% | %exclget%"" %sp%" ^ "put -filemask=""%inclput% | %exclput%"" %lp%" ^ "mkdir %sback%" ^ "mv %sp%/file4.zip %sback%/file4_%date%.zip" ^ "exit" pause (а то еще обиды пойдут - не захотел помочь, а зачем начинал ...) |
Отправлено: 04:21, 30-10-2020 | #9 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Интерфейс - windows xp2 проблема с перемещением панели задач | dignity102 | Microsoft Windows 2000/XP | 3 | 11-01-2015 19:09 | |
HDD - Проблема с перемещением файлов на HDD | SamoSdelkin | Накопители (SSD, HDD, USB Flash) | 10 | 25-11-2014 04:57 | |
2007 - Word | проблемы с перемещением фото | nikitermolaev | Microsoft Office (Word, Excel, Outlook и т.д.) | 9 | 02-06-2010 14:27 | |
[решено] Проблема с перемещением слайдера (trackbar) | alexey_a | AutoIt | 12 | 19-05-2009 09:47 | |
Ошибка - Проблема с перемещением | Maggot_93 | Microsoft Windows 2000/XP | 1 | 09-04-2009 22:01 |
|