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

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

Ответить
Настройки темы
CMD/BAT - Помогите с рутинным перемещением файлов.

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


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

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


Доброго времени суток.
Столкнулся с затруднениями при попытке создания батника для рутинных созданий и перемещений файлов.
До этого создавал батничек, который подключался по 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 и должен забирать файлы с разными датами. Например, с пятницы (вечер) и до понедельника (утро) ( Есть ли какая-нибудь возможность их забирать и не дублировать? Проверка на дубликаты)
Создавать архивную папку на актуальную дату ( Не получилось создать именно в нужной мне папке на сетевом диске) почему-то дублирует просто путь и создает папку не в той директории
Был бы очень признателен, если бы вы помогли мне хотя бы с частью этой рутины. Заранее спасибо и прошу прощения , если мой вопрос покажется кому-то немного глупым

Отправлено: 10:30, 26-10-2020

 

Ветеран


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

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


Skywalker875,
во-первых так конечно дела не делаются: Я вот изобретаю велосипед, сделайте все за меня, а я звоночек повешу. Надо самому разобраться и вникнуть, ну да ладно, смотрю что-то делали.
во-вторых давайте четкое условие, не очень понятно что откуда копировать и куда и что архивировать, давайте четко
------
есть сервер (шара, ...)
надо (например с помощью планировщика) в определенные дни запускать bat который
- скачает определенные файлы в папку, в которой уже есть какие-то файлы
- проверит какие новее из таких же по имени и только те и оставит в этой папке (точнее по поводу дублей, тут непонятно как они могут получаться)
- создаст архив этой папки на другом диске
- создаст архив этой папки и отправит его на сервер (шару, ...)
------
подкорректируйте и выдайте понятное условие, тогда помощь будет и быстрее и точнее.

Последний раз редактировалось alpap, 27-10-2020 в 13:06.

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

Отправлено: 12:40, 27-10-2020 | #2



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

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


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


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

Профиль | Отправить 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
Благодарности: 564

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


можете мне по части дублей детальнее разъяснить?
если файл имеет одно и то же имя, то в следующий раз он или не будет копироваться или перепишет старый
если файл имеет другое имя, но равен такому же за прошлый день по содержимому и размеру, то вариантов несколько:
- можно гарантированно забирать старый файл раньше чем появится новый, тогда нужно точно знать временнЫе рамки появления файла и запуска bat
- можно забирать из папки самые новые по дате изменения файлы, если более старые не актуальны

очень слабое условие, много темных пятен:
-что за файлы, это архивы или просто какие-то файлы
-какая маска файлов, несколько вариантов имен файлов, есть ли дата в имени
-дубли одного и того же файла уже есть на сервере и нужно выбрать самый свежий
-как часто появляются файлы на сервере, чтобы понимать в какое время делать запуск bat раз в сутки из планировщика

Цитата Skywalker875:
попытаться настроить, т.к я не знаю как ухватиться за автоматическую подгрузку файлов »
это несложно, примерно такой 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:
можно сделать какой-то индикатор? »
тоже неплохая идея, имеется ввиду что вы можете управлять именами файлов появляющихся (создавать) на сервере или маркировать скачанные?

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

Отправлено: 02:14, 28-10-2020 | #4


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


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

Профиль | Отправить 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
Благодарности: 564

Профиль | Отправить 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
Благодарности: 0

Профиль | Отправить 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
Благодарности: 564

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


Цитата Skywalker875:
Подскажете, где я накосячил? »
везде где можно
------
я сомневаюсь уже что вы хоть что-то делали и что-то работало, глядя на все безобразие выше, точно следует продолжать или вы сначала изучите работу WinSCP, соединение по SFTP, команды WinSCP и cmd
вам с этим работать, что-то менять и дорабатывать, если я сейчас составлю код идеально соответствующий вашим путям, ключам и пр.. то как вы будете выкручиваться, когда например слетит паблик ключ, авторизация по нему или с другого пользователя надо выйти, да мало ли чего.

вот например, 11-я строка моего кода, МОЕГО, с МОИМИ данными
Код: Выделить весь код
"open sftp://Юзер:Пароль@localhost:Порт/ -hostkey=""ssh-ed25519 255 БуквыЦифры/БуквыЦифры=""" ^

Отправлено: 15:44, 29-10-2020 | #8


Ветеран


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

Профиль | Отправить 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



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Интерфейс - 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




 
Переход