1 (изменено: alexii, 2012-11-29 10:43:50)

Тема: VBS: Удаление строк в файле

Здравствуйте!
Обращаюсь за помощью.
Нужно сделать скрипт, который бы удалял из всех файлов в каталоге строку, содержащую определённые данные.
Например:
Есть 2 файла с таем содержанием:
файл 1:

111|40101
222|40102
333|41105

файл 2:

444|40102
555|40101
666|42201

Нужно, чтобы скрипт удалил все строки, в которых встречаются цифры 40101 и 40102
В итоге должны получиться файлы:
файл 1:

333|41105

файл 2:

666|42201

Подскажите, пожалуйста, как сделать?

2 (изменено: badik, 2012-11-29 09:45:50)

Re: VBS: Удаление строк в файле

findstr.exe /V /C:"|40101" old.txt | findstr.exe /V /C:"|40102" >new.txt

3

Re: VBS: Удаление строк в файле

А VBS скриптом нельзя такое сделать?

4

Re: VBS: Удаление строк в файле

Можно.

5

Re: VBS: Удаление строк в файле

А как?

6

Re: VBS: Удаление строк в файле

Открыть исходный файл. Создать временный файл. Прочитать одну строку из открытого файла, ища в прочитанной строке посредством функции «InStr()» заданную подстроку. Если подстрока не найдена — записать строку во временный файл. Повторять чтение строк, проверку и запись до конца исходного файла. Переименовать исходный файл, переименовать временный файл в имя исходного. Повторять заданные действия для каждого из файлов в заданной папке.

7

Re: VBS: Удаление строк в файле

Алгоритм поиска я сделал! Не подскажете как переименовывать временный файл в исходный?

8 (изменено: ypppu, 2012-11-29 12:46:39)

Re: VBS: Удаление строк в файле

Вот такой скрипт получился, но все данные сваливаются в один файл. Как сделать, чтобы имя временного файла равнялось исходному?

w = "40211"                 'искомые слова
w2 = "40322"
papka = "C:\temp\VBS\file\"     'папка поиска
out = "C:\temp\VBS\out.txt"     'файл-результат
i=0
Dim boolFound

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set file2 = objFSO.OpenTextFile(out, 2, True) 

RecursiveFolderScan papka
file2.close

Msgbox "Обработано: "& i &" файл(ов)"

Sub RecursiveFolderScan(FolderPath)
    'Получаем объектную модель текущего каталога
    Set Folder = objFSO.GetFolder(FolderPath)
 
    'Перебираем все файлы в текущем каталоге
    For Each File in Folder.Files
'+++++++++++++++++++++++++++++++++++++++++

Set file1 = objFSO.OpenTextFile(File, 1, False)
boolFound = False
Do Until file1.AtEndOfStream
sw = file1.ReadLine()
	If (InStr(1, sw, w) = 0) AND (InStr(1, sw, w2) = 0) Then     'копируем в др. файл все строки не равные этой
	boolFound = True         
	file2.WriteLine(sw)         
	End If
	
Loop
file1.close
 

'objFSO.DeleteFile File, 1    'удаляем исход.файл
'objFSO.MoveFile out, file


i=i+1        'счетчик файлов
'++++++++++++++++++++++++++++++++++++++

    Next
 
    'Перебираем все подкаталоги в каталоге
    For Each SubFolder in Folder.SubFolders
        RecursiveFolderScan(SubFolder.Path)
    Next
End Sub

9

Re: VBS: Удаление строк в файле

Kenoby666
Добрый день!!
А можно найденного слова в строке не удалят а эту строку сохранит на другой файл или другие строки без этих слов удалит?