CMD/BAT - Скачивание с ftp, обработка файлов и обратная закгрузка

Аватара пользователя
ul9

CMD/BAT - Скачивание с ftp, обработка файлов и обратная закгрузка

Сообщение ul9 »

Здравствуйте.



Вновь решила прибегнуть к помощи форумчан.

Напишу сразу, язык исполнения не имеет значения.



Обрисую картину вкратце:

Есть фтп, на него нужно подключиться, скачать определённые файлы, найти в них заданный текст (конкретная строка HTML). Сделать в файлах замену по образцу и закачать обратно на фтп.



Понимаю, что задача не из простых, поэтому готова отблагодарить материально. Изображение



Если вас ещё не отпугнуло начало, то я продолжу и опишу всё это подробно:



1. Подключаемся к фтп.

Нужно универсальное решение. Т.к. фтп каждый раз разное и всё время редактировать в исходнике user, pass не вариант. Поэтому я вижу такое решение. Запускаю исполнение, появляется пустой текстовый файл. В первой строчке я ввожу фтп адрес, во второй логин, в третьей пароль - нажимаю сохранить и эта информация обрабатывается и происходит подключение.



2. Скачивание файлов.

На каждом фтп структура папок стандартная, но есть лишние файлы, которые нам не нужны. Поэтому нужно скачивать конкретные файлы, которые, например, можно брать из заготовленного списка и поочередно выкачивать. Но, нужно учесть, что при скачивании файлов на компьютер должна сохраниться структура папок с файлами внутри. Скачивание файлов происходит в определённую папку. Назовём её Temp. После скачивания нужно проверить файлы на целостность, конечно необязательно, но бывает так, что фтп не всегда отдаёт файлы. После проверки на наличие всех файлов в папке, мы приступаем к следующему шагу.



3. Обработка файлов.

У нас есть два файла: в одном (файл Search) - что надо найти; во втором (файл Destination) - на что заменить. В этих файлах код html с множеством символов. Так вот, перед началом обработки необходимо проверить наши скаченные файлы в папке Temp на наличие тех самых строк из файла Search. Достаточно вывести количество файлов, в которых были найдены эти строки. Так как всегда количество файлов одинаково. Например: "Заданный текст встречается в 15 файлах". Но текст может встречаться в разных вариациях (лишняя запятая, другое окончание у слова). И текст может не находить. Поэтому скрипт, после поиска в файлах, должен запросить разрешение на работу. Если нажимаю нет, то скрипт завершается и открывает файл Search для редактирования поисковой фразы. Если да, то работа продолжается.

Мы проверили файлы на наличие нужной строки и можем приступить к обработке файлов. Вносим изменения во все файлы в папке Temp и подпапки. Из файла Search ищем, из файла Destination заменяем. И в конце указываем количество файлов, в которых была произведена замена. Например: "Замена произведена в 15 файлах".

Папка Temp содержит в себе скаченные подпапки и файлы с именами на транслите. Поэтому поиск и замену нужно производить и в подпапках в том числе.



4. Закачивание обратно на фтп.

Здесь всё просто. Наши обработанные файлы закачиваем обратно на тот же фтп. Заменяя исходные файлы на фтп и сохраняя структуру папок. После закачивания, нужно отписаться, что все файлы были переданы успешно.



На этом всё.

Прошу прощения за мой "французский".

Спасибо, что дочитали до конца.

Очень рассчитываю на вашу помощь, ограничена во времени. Изображение
Аватара пользователя
Iska

Re: CMD/BAT - Скачивание с ftp, обработка файлов и обратная закгрузка

Сообщение Iska »

Цитата ul9:



1. Подключаемся к фтп.

Нужно универсальное решение. Т.к. фтп каждый раз разное и всё время редактировать в исходнике user, pass не вариант. Поэтому я вижу такое решение. Запускаю исполнение, появляется пустой текстовый файл. В первой строчке я ввожу фтп адрес, во второй логин, в третьей пароль - нажимаю сохранить и эта информация обрабатывается и происходит подключение.
CMD/BAT - Скачивание с ftp, обработка файлов и обратная закгрузка




Универсальное решение — использование командной строки, в которой будут указываться потребные параметры, либо имя конфигурационного файла, содержащего потребные параметры. Но никак не то, что Вы описали.




Цитата ul9:



После скачивания нужно проверить файлы на целостность
CMD/BAT - Скачивание с ftp, обработка файлов и обратная закгрузка




Что Вы под этим понимаете?



P.S. Поиск и замена в html-файлах — задача никак не для пакетных файлов.
Аватара пользователя
ul9

Re: CMD/BAT - Скачивание с ftp, обработка файлов и обратная закгрузка

Сообщение ul9 »

Цитата Iska:



либо имя конфигурационного файла, содержащего потребные параметры
CMD/BAT - Скачивание с ftp, обработка файлов и обратная закгрузка




Это было бы хорошо. Запустил скрипт, он открыл конфигурацию, ты внёс свои правки, сохранил, закрыл файл и продолжилась обработка.


Цитата Iska:



Что Вы под этим понимаете?
CMD/BAT - Скачивание с ftp, обработка файлов и обратная закгрузка




Я имела в виду проверку, все ли файлы скачались из списка.


Цитата Iska:



P.S. Поиск и замена в html-файлах — задача никак не для пакетных файлов.
CMD/BAT - Скачивание с ftp, обработка файлов и обратная закгрузка




А как же это?

Кажется это ваш код, если не ошибаюсь. И он отлично работает. Из одного файла берёт что ищем, из другого чем заменяем. И обрабатывает всю папку с подпапками.



Код:

Код: Выделить всё

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
'=============================================================================

Вызывается



Код:

Код: Выделить всё

cscript.exe //nologo replace.vbs /FolderForScan:"%UserProfile%\work" /FileExtension:"html" /FileWhatFind:"text\utf_s.txt" /FileReplaceBy:"text\utf_r.txt"

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

Re: CMD/BAT - Скачивание с ftp, обработка файлов и обратная закгрузка

Сообщение ul9 »

Цитата ul9:



Запустил скрипт, он открыл конфигурацию, ты внёс свои правки, сохранил, закрыл файл и продолжилась обработка.
CMD/BAT - Скачивание с ftp, обработка файлов и обратная закгрузка




Это не хорошо. Вы создали конфигурационный файл, сохранили и перетянули его на скрипт (если не умеете работать с командной строкой).




Цитата ul9:



Я имела в виду проверку, все ли файлы скачались из списка.
CMD/BAT - Скачивание с ftp, обработка файлов и обратная закгрузка




Ну, об этом сообщит ненулевой код возврата используемого менеджера загрузки. Во всяком случае, так ведут себя приличные утилиты.




Цитата ul9:



А как же это?

Кажется это ваш код, если не ошибаюсь. И он отлично работает. Из одного файла берёт что ищем, из другого чем заменяем. И обрабатывает всю папку с подпапками.
CMD/BAT - Скачивание с ftp, обработка файлов и обратная закгрузка




1. Судя по внешнему виду — да, возможно,что и мой.

2. Работает. Но с текстовыми файлами в ANSI-кодировке. Что до html в какой-нибудь экзотичной кодировке — только теоретически. И будьте готовы к тому, что, например, «&», «» (и т.п.) — это «&», «<» и «>». Как при поиске, так и при замене. И не забудьте про всё ту же кодировку.




Цитата ul9:



чтобы он считал сначала количество совпадений,
CMD/BAT - Скачивание с ftp, обработка файлов и обратная закгрузка




Зачем?




Цитата ul9:



Если продолжить, то в конце операции писал бы количество замен.
CMD/BAT - Скачивание с ftp, обработка файлов и обратная закгрузка




Зачем?
Аватара пользователя
Iska

Re: CMD/BAT - Скачивание с ftp, обработка файлов и обратная закгрузка

Сообщение Iska »

Цитата:



Цитата Iska:

если не умеете работать с командной строкой
CMD/BAT - Скачивание с ftp, обработка файлов и обратная закгрузка




Я с программированием очень плохо знакома. Всё исключительно на помощи коллег и форумчан держится. Изображение


Цитата:



Цитата Iska:

Это не хорошо. Вы создали конфигурационный файл, сохранили и перетянули его на скрипт.
CMD/BAT - Скачивание с ftp, обработка файлов и обратная закгрузка




Значит можно вызвать этот конфигурационный файл через батник, отредактировать его и потом без перетаскиваний запустить через call его.


Цитата:



Цитата Iska:

чтобы он считал сначала количество совпадений, »

Зачем?
CMD/BAT - Скачивание с ftp, обработка файлов и обратная закгрузка




Я же писала, что в основном везде одинаковый текст, но где-то может встретиться лишняя запятая или другое окончание в слове. Из-за этого файл не будет обработан. И уйдёт обратно на фтп необработанным. Я заранее знаю, что файлов для обработки ровно 21 html. И если скрипт посчитает и напишет, что было найдено 21 совпадение, то я буду уверена, что и замена пройдёт во всех файлах.


Цитата:



Цитата Iska:

И будьте готовы к тому, что, например, «&», «» (и т.п.) — это «&», «<» и «>»
CMD/BAT - Скачивание с ftp, обработка файлов и обратная закгрузка




Нет, это не так. Я работаю с этим скриптом и он обрабатывает все символы. «&», «» - эти в том числе и ещё куча других спец.символов. Кодировка Ansi.
Аватара пользователя
ul9

Re: CMD/BAT - Скачивание с ftp, обработка файлов и обратная закгрузка

Сообщение ul9 »

Цитата ul9:



Значит можно вызвать этот конфигурационный файл через батник, отредактировать его и потом без перетаскиваний запустить через call его.
CMD/BAT - Скачивание с ftp, обработка файлов и обратная закгрузка




Не надо «вызывать его через батник». «Ручками» создаёте файл конфигурации и сохраняете. Вы понимаете, зачем вообще они нужны — файлы конфигурации?! Для повторного использования. То есть, Вы создаёте для каждого сервера отдельный файл один раз, затем используете его повторно многократно.




Цитата ul9:



Я заранее знаю, что файлов для обработки ровно 21 html. И если скрипт посчитает и напишет, что было найдено 21 совпадение, то я буду уверена, что и замена пройдёт во всех файлах.
CMD/BAT - Скачивание с ftp, обработка файлов и обратная закгрузка




Ясно.




Цитата ul9:



Нет, это не так.
CMD/BAT - Скачивание с ftp, обработка файлов и обратная закгрузка




Нет, это так:
Мнемоники в HTML — Википедия
, полный текущий рекомендованный список ищите на W3C.



Давайте сделаем так: Вы упакуйте пару-тройку html-файлов в архив, присовокупите к ним файл с фразами для поиска и файл с фразами для замены соответственно. Затем отошлите полученный архив (или ссылку на него) мне в личку. Я посмотрю и обещаю подумать.
Аватара пользователя
Iska

Re: CMD/BAT - Скачивание с ftp, обработка файлов и обратная закгрузка

Сообщение Iska »

Цитата Iska:



Не надо «вызывать его через батник». «Ручками» создаёте файл конфигурации и сохраняете. Вы понимаете, зачем вообще они нужны — файлы конфигурации?! Для повторного использования. То есть, Вы создаёте для каждого сервера отдельный файл один раз, затем используете его повторно многократно.
CMD/BAT - Скачивание с ftp, обработка файлов и обратная закгрузка




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


Цитата Iska:



Давайте сделаем так: Вы упакуйте пару-тройку html-файлов в архив, присовокупите к ним файл с фразами для поиска и файл с фразами для замены соответственно. Затем отошлите полученный архив (или ссылку на него) мне в личку. Я посмотрю и обещаю подумать.
CMD/BAT - Скачивание с ftp, обработка файлов и обратная закгрузка




Отлично, минут через 20 скину в лс.
Аватара пользователя
ul9

Re: CMD/BAT - Скачивание с ftp, обработка файлов и обратная закгрузка

Сообщение ul9 »

Цитата ul9:



Дело в том, что многократное использование мне не нужно. Необходимо разово пробежаться по всем фтп и внести корректировки в файлы.
CMD/BAT - Скачивание с ftp, обработка файлов и обратная закгрузка




А когда это потребуется сделать (тоже разово) — в очередной раз?



Файлы на разных серверах одни и те же? Пути к ним (за исключением имён серверов) одинаковые? Пары поиска/замены для одинаковых html-файлов на разных серверах одни и те же?
Аватара пользователя
Iska

Re: CMD/BAT - Скачивание с ftp, обработка файлов и обратная закгрузка

Сообщение Iska »

Цитата Iska:



А когда это потребуется сделать (тоже разово) — в очередной раз?
CMD/BAT - Скачивание с ftp, обработка файлов и обратная закгрузка




Никогда. Но фтп очень много, порядка 200.


Цитата Iska:



Файлы на разных серверах одни и те же?
CMD/BAT - Скачивание с ftp, обработка файлов и обратная закгрузка




Имена у файлов одни и те же, содержание разное, но искомые строчки одни и те же.


Цитата Iska:



Пути к ним (за исключением имён серверов) одинаковые?
CMD/BAT - Скачивание с ftp, обработка файлов и обратная закгрузка




Одинаковые.


Цитата Iska:



Пары поиска/замены для одинаковых html-файлов на разных серверах одни и те же?
CMD/BAT - Скачивание с ftp, обработка файлов и обратная закгрузка




Нужно сделать одни и те же замены в определённых файлах на всех фтп.
Аватара пользователя
ul9

Re: CMD/BAT - Скачивание с ftp, обработка файлов и обратная закгрузка

Сообщение ul9 »

Цитата ul9:



Никогда.
CMD/BAT - Скачивание с ftp, обработка файлов и обратная закгрузка




Зуб даёте Изображение?



С остальным пока, в принципе, ясно. То есть, у нас, фактически, перечень серверов (имя сервера+/-порта, логин+пароль), перечень относительных путей файлов (единый для всех серверов) и набор пар фраз для каждого относительного пути файла, так?
Ответить

Вернуться в «Скриптовые языки администрирования Windows»