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

Показать сообщение отдельно
ul9 ul9 вне форума Автор темы

Пользователь


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

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


Цитата Iska:
либо имя конфигурационного файла, содержащего потребные параметры »
Это было бы хорошо. Запустил скрипт, он открыл конфигурацию, ты внёс свои правки, сохранил, закрыл файл и продолжилась обработка.
Цитата Iska:
Что Вы под этим понимаете? »
Я имела в виду проверку, все ли файлы скачались из списка.
Цитата Iska:
P.S. Поиск и замена в html-файлах — задача никак не для пакетных файлов. »
А как же это?
Кажется это ваш код, если не ошибаюсь. И он отлично работает. Из одного файла берёт что ищем, из другого чем заменяем. И обрабатывает всю папку с подпапками.
Код: Выделить весь код
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"
Его бы модифицировать, чтобы он считал сначала количество совпадений, а потом предлагал либо выйти, либо продолжить. Если продолжить, то в конце операции писал бы количество замен.

Отправлено: 21:44, 19-07-2013 | #3