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

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

Ответить
Настройки темы
VBS/WSH/JS - [решено] VBS, поиск во всех файлах заданной папки и запись в файл.

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


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

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


Изменения
Автор: vlad20
Дата: 27-07-2012
Привет, скорректируйте пожалуйста.
В заданной папке (C:\old) есть 520 файлов. В каждом файле нужно выполнить построчный поиск, если в строке есть заданное слово, то записать строку в файл (output.txt должен содержать информацию из 520 файлов).

В моем случае работает если явно указать имя файла, а мне нужно, чтобы поиском пройтись по всем 520 и записать всю найден. информацию в один файл output.txt.

Option Explicit
Dim fso, tsIn, tsOut, str
Set fso= Createobject("Scripting.FileSystemObject")
Set tsIn = fso.OpenTextFile("C:\old\filelog.2010-10-04", 1, 0) ' открываем файл для чтения, в ASCII
Set tsOut = fso.CreateTextFile("output.txt", True, False) 'создаём файл в ASCII, при наличии файл перезаписывается
Do While Not tsIn.AtEndOfStream
str = tsIn.ReadLine 'читаем построчно исходный файл
If InStr(1, str, "Мой текст", 1) <> 0 Then 'ищем искомое слово в строке
tsOut.WriteLine str 'записываем найденную строку в выходной файл
End If
Loop
tsIn.Close
tsOut.Close
Set fso = Nothing

Отправлено: 09:17, 27-07-2012

 

Ветеран


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

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


Цитата vlad20:
а мне нужно, чтобы поиском пройтись по всем 520 »
Код: Выделить весь код
…
Set tsOut = fso.CreateTextFile("output.txt", True, False)

For Each objFile In objFSO.GetFolder("C:\old").Files
    Set tsIn = objFile.OpenAsTextStream(…)
    …
Next

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

Отправлено: 11:08, 27-07-2012 | #2



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

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


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


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

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


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

Отправлено: 12:03, 27-07-2012 | #3


Ветеран


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

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


vlad20, примерно так (не проверялось):
читать дальше »
Код: Выделить весь код
Option Explicit

Dim strSourceFolder
Dim strOutputFile
Dim strText4Find

Dim objFSO
Dim objFile
Dim objTSOutput
Dim objTSInput
Dim strValue


strSourceFolder = "C:\old"
strOutputFile   = "output.txt"
strText4Find    = "Мой текст"

With WScript.CreateObject("Scripting.FileSystemObject")
	If .FolderExists(strSourceFolder) Then
		Set objTSOutput = .CreateTextFile(strOutputFile, True)
		
		For Each objFile In .GetFolder(strSourceFolder).Files
			With objFile.OpenAsTextStream()
				Do Until .AtEndOfStream()
					strValue = .ReadLine()
					
					If InStr(strValue, strText4Find, vbTextCompare) <> 0 Then
						objTSOutput.WriteLine strValue
					End If
				Loop
				
				.Close
			End With
		Next
		
		objTSOutput.Close
		
		Set objTSOutput = Nothing
	Else
		WScript.Echo "Source folder [" & strSourceFolder & "] not found"
		WScript.Quit 1
	End If
End With

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

Отправлено: 13:26, 27-07-2012 | #4


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


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

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


В результате выполнения кода получается Ошибка: Объект не поддерживает это свойство или метод: 'AtEndOfStream'
вышел из ситуации так, "слил" все файлы в один
читать дальше »
Dim objFSO: Set objFSO = CreateObject("Scripting.FileSystemObject")

JoinTXT "C:\old"

Sub JoinTXT(strFolderPath)
Dim objFolder, objFile, strTempText, strAllText

If objFSO.FolderExists(strFolderPath) Then
Set objFolder = objFSO.GetFolder(strFolderPath)
For Each objFile In objFolder.Files
strExt = LCase(objFSO.GetExtensionName(objFile.Path))
If (strExt = "txt") Or (strExt = "log") Then
strTempText = ReadFile(objFile.Path)
If strTempText <> "" Then
strAllText = strAllText & strTempText & vbCrLf & "===== " & objFile.Name & " =====" & vbCrLf
End If
'objFile.Delete True ' удалить файл
End If
Next
End If

Set objFile = objFSO.CreateTextFile(strFolderPath & "\AllTextFiles.txt")
objFile.Write strAllText
objFile.Close
End Sub

MsgBox "выход"
Set objFSO = Nothing
Wscript.quit


Function ReadFile(strTempFilePath)
On Error Resume Next
Dim objTempFile, strText
Set objTempFile = objFSO.OpenTextFile(strTempFilePath, 1, False)
strText = objTempFile.Readall
objTempFile.Close
ReadFile = strText
End Function

и выполнил построчный поиск
читать дальше »
Option Explicit
Dim fso, tsIn, tsOut, str
Set fso= Createobject("Scripting.FileSystemObject")
Set tsIn = fso.OpenTextFile("C:\old\filelog.2010-10-04", 1, 0) ' открываем файл для чтения, в ASCII
Set tsOut = fso.CreateTextFile("output.txt", True, False) 'создаём файл в ASCII, при наличии файл перезаписывается
Do While Not tsIn.AtEndOfStream
str = tsIn.ReadLine 'читаем построчно исходный файл
If InStr(1, str, "Мой текст", 1) <> 0 Then 'ищем искомое слово в строке
tsOut.WriteLine str 'записываем найденную строку в выходной файл
End If
Loop
tsIn.Close
tsOut.Close
Set fso = Nothing

Отправлено: 13:49, 30-07-2012 | #5


Ветеран


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

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


Проверенный вариант.

1. «.AtEndOfStream» — свойство. Исправьте:
читать дальше »
Код: Выделить весь код
        Do Until .AtEndOfStream()
на:
Код: Выделить весь код
        Do Until .AtEndOfStream


2. Забыл, что:
читать дальше »
Цитата:
start

Optional. Numeric expression that sets the starting position for each search. If omitted, search begins at the first character position. If start contains Null, an error occurs. The start argument is required if compare is specified.

Исправьте:
читать дальше »
Код: Выделить весь код
          If InStr(strValue, strText4Find, vbTextCompare) <> 0 Then
на:
Код: Выделить весь код
          If InStr(1, strValue, strText4Find, vbTextCompare) <> 0 Then
Это сообщение посчитали полезным следующие участники:

Отправлено: 01:52, 31-07-2012 | #6



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Удалить всё кроме заданной папки sg_swin Скриптовые языки администрирования Windows 18 30-06-2021 19:19
CMD/BAT - поиск строк по шаблону и запись в отдельный файл AVTS Скриптовые языки администрирования Windows 4 13-07-2012 00:51
CMD/BAT - Мониторинг - поиск архивов с заданной датой в имени Serg2010 Скриптовые языки администрирования Windows 0 21-05-2012 21:59
Драйвер - Автоматический поиск драйвера в заданной папке в Windows XP dzekka Microsoft Windows 2000/XP 2 19-10-2010 05:09
Драйвер - [решено] Поиск подходящего драйвера в заданной папке с подпапками Speaker Microsoft Windows 2000/XP 2 01-03-2008 19:07




 
Переход