Показать полную графическую версию : Помогите с рутинным перемещением файлов.
Skywalker875
26-10-2020, 10:30
Доброго времени суток.
Столкнулся с затруднениями при попытке создания батника для рутинных созданий и перемещений файлов.
До этого создавал батничек, который подключался по sftp и забирал файлы из определенной папки. ( Мне не хватило сил всё это объединить в один, поэтому я разбил на 3 батника)
1)
cd WinSCP
winscp.com /ini=mul /script=C:\Users\plc-zes\Desktop\test1\2.bat
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
3)move диск:\папка\папка\папка\*.расширение файлов диск:\папка\папка\ тут я просто перемещаю расшифрованные файлы в нужную мне папку для обработки в вебарме
Вопрос собственно такой к знатокам своего дела и просто более сведущим в этих вопросах людям.
Мне теперь необходимо скачивать файлы разных форматов и на разные даты (обычно текущая + след. день) т.е я не смог придумать как цеплять все файлы и не дублировать потом их при обработке
Плюс нужно создавать 2 архивные папки на своем диске + на сетевом.
Т.е выглядит это теперь так:
Подключась по sftp и должен забирать файлы с разными датами. Например, с пятницы (вечер) и до понедельника (утро) ( Есть ли какая-нибудь возможность их забирать и не дублировать? Проверка на дубликаты)
Создавать архивную папку на актуальную дату ( Не получилось создать именно в нужной мне папке на сетевом диске) почему-то дублирует просто путь и создает папку не в той директории
Был бы очень признателен, если бы вы помогли мне хотя бы с частью этой рутины. Заранее спасибо и прошу прощения , если мой вопрос покажется кому-то немного глупым :)
Skywalker875,
во-первых так конечно дела не делаются: Я вот изобретаю велосипед, сделайте все за меня, а я звоночек повешу. Надо самому разобраться и вникнуть, ну да ладно, смотрю что-то делали.
во-вторых давайте четкое условие, не очень понятно что откуда копировать и куда и что архивировать, давайте четко
------
есть сервер (шара, ...)
надо (например с помощью планировщика) в определенные дни запускать bat который
- скачает определенные файлы в папку, в которой уже есть какие-то файлы
- проверит какие новее из таких же по имени и только те и оставит в этой папке (точнее по поводу дублей, тут непонятно как они могут получаться)
- создаст архив этой папки на другом диске
- создаст архив этой папки и отправит его на сервер (шару, ...)
------
подкорректируйте и выдайте понятное условие, тогда помощь будет и быстрее и точнее.
Skywalker875
27-10-2020, 13:49
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 раз в сутки из планировщика
попытаться настроить, т.к я не знаю как ухватиться за автоматическую подгрузку файлов »
это несложно, примерно такой bat запускать из планировщика:
@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
28-10-2020, 11:44
Как я и говорил тут файлы приходят "особого" формата. Меня в принципе устроит упростить хотя бы часть с загрузкой в папку для приема файлов (последующая выгрузка в программе) и копированием в архивную папку (тут я ничего не трогаю и просто храню файлы до востребования)
Разъясняю по части дублей. Я закидываю в папку , как видно на скриншоте (in) оттуда забираются в программу. Потом я чищу in ручками, чтобы потом не подгружать повторно и чтобы просто не мешались. Просто там всякая различная информация по картам и прочим "радостям" , поэтому не хочется дублировать запросы.
В принципе мне не нужно , чтобы 24/7 отрабатывался скрипт. Мне будет гораздо легче запускать его руками 2-3 раза в день и потом выгружать в программу.
Все равно там файлы подгружают 24/7 и не получится их забирать и обрабатывать постоянно. Плюс на сервере нельзя неактуальные файлы убирать в архив, я бы тогда просто прогонял старый скрипт, просто указав вместо расширений , чтобы забирал все файлы. Поэтому я и зашел в тупик(
https://i.imgur.com/SQoO35D.png
https://i.imgur.com/JRPgH7K.png
устроит упростить хотя бы часть с загрузкой в папку для приема файлов »
я уже привел код выше, пробовали его для начала?
хорошо, разделю и опишу чтобы понятно было
@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, дальше будем докручивать по надобности.
Skywalker875
29-10-2020, 15:31
Спасибо за пример и объяснения в нем, но я попробовал и у меня не получилось:)
@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. Заранее спасибо)
Подскажете, где я накосячил? »
везде где можно
------
я сомневаюсь уже что вы хоть что-то делали и что-то работало, глядя на все безобразие выше, точно следует продолжать или вы сначала изучите работу 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
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
И играйтесь-тренируйтесь,
(а то еще обиды пойдут - не захотел помочь, а зачем начинал ...)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.