|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Скачивание с ftp, обработка файлов и обратная закгрузка |
|
|
CMD/BAT - Скачивание с ftp, обработка файлов и обратная закгрузка
|
Пользователь Сообщения: 122 |
Здравствуйте.
Вновь решила прибегнуть к помощи форумчан. Напишу сразу, язык исполнения не имеет значения. Обрисую картину вкратце: Есть фтп, на него нужно подключиться, скачать определённые файлы, найти в них заданный текст (конкретная строка HTML). Сделать в файлах замену по образцу и закачать обратно на фтп. Понимаю, что задача не из простых, поэтому готова отблагодарить материально. ![]() Если вас ещё не отпугнуло начало, то я продолжу и опишу всё это подробно: 1. Подключаемся к фтп. Нужно универсальное решение. Т.к. фтп каждый раз разное и всё время редактировать в исходнике user, pass не вариант. Поэтому я вижу такое решение. Запускаю исполнение, появляется пустой текстовый файл. В первой строчке я ввожу фтп адрес, во второй логин, в третьей пароль - нажимаю сохранить и эта информация обрабатывается и происходит подключение. 2. Скачивание файлов. На каждом фтп структура папок стандартная, но есть лишние файлы, которые нам не нужны. Поэтому нужно скачивать конкретные файлы, которые, например, можно брать из заготовленного списка и поочередно выкачивать. Но, нужно учесть, что при скачивании файлов на компьютер должна сохраниться структура папок с файлами внутри. Скачивание файлов происходит в определённую папку. Назовём её Temp. После скачивания нужно проверить файлы на целостность, конечно необязательно, но бывает так, что фтп не всегда отдаёт файлы. После проверки на наличие всех файлов в папке, мы приступаем к следующему шагу. 3. Обработка файлов. У нас есть два файла: в одном (файл Search) - что надо найти; во втором (файл Destination) - на что заменить. В этих файлах код html с множеством символов. Так вот, перед началом обработки необходимо проверить наши скаченные файлы в папке Temp на наличие тех самых строк из файла Search. Достаточно вывести количество файлов, в которых были найдены эти строки. Так как всегда количество файлов одинаково. Например: "Заданный текст встречается в 15 файлах". Но текст может встречаться в разных вариациях (лишняя запятая, другое окончание у слова). И текст может не находить. Поэтому скрипт, после поиска в файлах, должен запросить разрешение на работу. Если нажимаю нет, то скрипт завершается и открывает файл Search для редактирования поисковой фразы. Если да, то работа продолжается. Мы проверили файлы на наличие нужной строки и можем приступить к обработке файлов. Вносим изменения во все файлы в папке Temp и подпапки. Из файла Search ищем, из файла Destination заменяем. И в конце указываем количество файлов, в которых была произведена замена. Например: "Замена произведена в 15 файлах". Папка Temp содержит в себе скаченные подпапки и файлы с именами на транслите. Поэтому поиск и замену нужно производить и в подпапках в том числе. 4. Закачивание обратно на фтп. Здесь всё просто. Наши обработанные файлы закачиваем обратно на тот же фтп. Заменяя исходные файлы на фтп и сохраняя структуру папок. После закачивания, нужно отписаться, что все файлы были переданы успешно. На этом всё. Прошу прощения за мой "французский". Спасибо, что дочитали до конца. Очень рассчитываю на вашу помощь, ограничена во времени. ![]() |
|
Отправлено: 15:51, 19-07-2013 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата ul9:
Цитата ul9:
P.S. Поиск и замена в html-файлах — задача никак не для пакетных файлов. |
||
Отправлено: 21:00, 19-07-2013 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 122
|
Профиль | Отправить PM | Цитировать Цитата Iska:
Цитата Iska:
Цитата Iska:
Кажется это ваш код, если не ошибаюсь. И он отлично работает. Из одного файла берёт что ищем, из другого чем заменяем. И обрабатывает всю папку с подпапками. Option Explicit Const ForReading = 1 Const ForWriting = 2 Dim objArgs Dim objFSO Dim objFile Dim strWhatFind Dim strReplaceBy Dim strContent Set objArgs = WScript.Arguments.Named If objArgs.Count = 4 Then Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") If objArgs.Exists("FolderForScan") Then If objArgs.Exists("FileExtension") Then If objArgs.Exists("FileWhatFind") Then If objArgs.Exists("FileReplaceBy") Then If objFSO.FolderExists(objArgs.Item("FolderForScan")) Then If objFSO.FileExists(objArgs.Item("FileWhatFind")) Then If objFSO.FileExists(objArgs.Item("FileReplaceBy")) Then If objFSO.GetFile(objArgs.Item("FileWhatFind")).Size > 0 Then With objFSO.OpenTextFile(objArgs.Item("FileWhatFind"), ForReading) strWhatFind = .ReadAll() .Close End With If objFSO.GetFile(objArgs.Item("FileReplaceBy")).Size > 0 Then With objFSO.OpenTextFile(objArgs.Item("FileReplaceBy"), ForReading) strReplaceBy = .ReadAll() .Close End With Else strReplaceBy = "" End If WScript.Echo "Folder for scan: " & objArgs.Item("FolderForScan") WScript.Echo "File extension: " & objArgs.Item("FileExtension") WScript.Echo "File what find: " & objArgs.Item("FileWhatFind") WScript.Echo "File replace by: " & objArgs.Item("FileReplaceBy") WScript.Echo ScanSubFolders objFSO.GetFolder(objArgs.Item("FolderForScan")) Else WScript.Echo "File [" & objArgs.Item("FileWhatFind") & "] is zero length" End If Else WScript.Echo "File [" & objArgs.Item("FileWhatFind") & "] not found" End If Else WScript.Echo "File [" & objArgs.Item("FileWhatFind") & "] not found" End If Else WScript.Echo "Folder [" & objArgs.Item("FolderForScan") & "] not found" End If Else WScript.Echo "Not found argument <FileReplaceBy>" Call Usage End If Else WScript.Echo "Not found argument <FileWhatFind>" Call Usage End If Else WScript.Echo "Not found argument <FileExtension>" Call Usage End If Else WScript.Echo "Not found argument <FolderForScan>" Call Usage End If Set objFSO = Nothing Else Call Usage End If Set objArgs = Nothing WScript.Quit '============================================================================= '============================================================================= Sub ScanSubFolders(objFolder) Dim objSubFolder Dim objFile WScript.Echo "[" & objFolder.Path & "]" For Each objFile In objFolder.Files If UCase(objFSO.GetExtensionName(objFile.Name)) = UCase(objArgs.Item("FileExtension")) Then WScript.Echo " " & objFile.Name If objFile.Size > 0 Then With objFSO.OpenTextFile(objFile.Path, ForReading) strContent = .ReadAll() .Close End With If InStr(1, strContent, strWhatFind, vbTextCompare) > 0 Then WScript.Echo " Fragment for replace found" With objFSO.OpenTextFile(objFile.Path, ForWriting) .Write Replace(strContent, strWhatFind, strReplaceBy) .Close End With End If End If End If Next WScript.Echo For Each objSubFolder In objFolder.SubFolders ScanSubFolders objSubFolder Next End Sub '============================================================================= '============================================================================= Sub Usage() WScript.Echo "Usage: cscript.exe //nologo " & WScript.ScriptName & " " & _ "/FolderForScan:<folder> " & _ "/FileExtension:<extension> " & _ "/FileWhatFind:<file> " & _ "/FileReplaceBy:<file>" End Sub '============================================================================= Его бы модифицировать, чтобы он считал сначала количество совпадений, а потом предлагал либо выйти, либо продолжить. Если продолжить, то в конце операции писал бы количество замен. |
|||
Отправлено: 21:44, 19-07-2013 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата ul9:
Цитата ul9:
Цитата ul9:
2. Работает. Но с текстовыми файлами в ANSI-кодировке. Что до html в какой-нибудь экзотичной кодировке — только теоретически. И будьте готовы к тому, что, например, «&», «<» и «>» (и т.п.) — это «&», «<» и «>». Как при поиске, так и при замене. И не забудьте про всё ту же кодировку. Цитата ul9:
Цитата ul9:
|
|||||
Отправлено: 22:21, 19-07-2013 | #4 |
Пользователь Сообщения: 122
|
Профиль | Отправить PM | Цитировать Цитата:
![]() Цитата:
Цитата:
Цитата:
|
|||||
Последний раз редактировалось ul9, 19-07-2013 в 23:08. Отправлено: 22:44, 19-07-2013 | #5 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата ul9:
Цитата ul9:
Цитата ul9:
Давайте сделаем так: Вы упакуйте пару-тройку html-файлов в архив, присовокупите к ним файл с фразами для поиска и файл с фразами для замены соответственно. Затем отошлите полученный архив (или ссылку на него) мне в личку. Я посмотрю и обещаю подумать. |
|||
Отправлено: 23:16, 19-07-2013 | #6 |
Пользователь Сообщения: 122
|
Профиль | Отправить PM | Цитировать Цитата Iska:
Цитата Iska:
|
||
Отправлено: 23:30, 19-07-2013 | #7 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата ul9:
Файлы на разных серверах одни и те же? Пути к ним (за исключением имён серверов) одинаковые? Пары поиска/замены для одинаковых html-файлов на разных серверах одни и те же? |
|
Отправлено: 23:38, 19-07-2013 | #8 |
Пользователь Сообщения: 122
|
Профиль | Отправить PM | Цитировать Цитата Iska:
Цитата Iska:
Цитата Iska:
Цитата Iska:
|
||||
Отправлено: 23:46, 19-07-2013 | #9 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата ul9:
![]() С остальным пока, в принципе, ясно. То есть, у нас, фактически, перечень серверов (имя сервера+/-порта, логин+пароль), перечень относительных путей файлов (единый для всех серверов) и набор пар фраз для каждого относительного пути файла, так? |
|
Отправлено: 23:57, 19-07-2013 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Скачивание с FTP по списку из текстового файла | Angel_Ok | Скриптовые языки администрирования Windows | 3 | 23-08-2011 22:32 | |
CMD/BAT - Определение имени папки и ее скачивание по FTP | volk1234 | Скриптовые языки администрирования Windows | 1 | 10-06-2011 16:19 | |
CMD/BAT - [решено] скачивание файлов с FTP | DeZMoN | Скриптовые языки администрирования Windows | 10 | 11-08-2010 11:53 | |
CMD/BAT - [решено] Скачивание папок и подпапок с FTP | Essential_mix | Скриптовые языки администрирования Windows | 1 | 16-01-2010 04:51 | |
Скачивание файлов | Artur | Хочу все знать | 8 | 16-02-2003 18:17 |
|