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

Показать сообщение отдельно

Ветеран


Contributor


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

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


Вот решение проблемы с помощью VBS - скрипта. Копируйте приведенный код в блокнот, сохраните в файл с расширением vbs, например, InsAndDel_xxx.vbs, запускайте как любой исполнимый файл.
Скрипт может вставить строку в указанное место, удалить указанную строку.

В скрипте надо прописать Ваши: Директорию
Текст вставляемой строки
Номер новой строки после вставки в текст
Номер удаляемой строки

Если номер вставляемой строки = номеру удаляемой, то строка заменяется

Вы можете сохранить скрипт с разными настройками под разными именами и последовательно их запускать.
Код: Выделить весь код
' Позволяет 1) Добавить строку в указанную строку всех текстовых файлов директории и поддиректорий
'           2) Удалить указанную по счету строку в текстовых файлах директории и поддиректорий
' Предполагается, что, кроме текстовых файлов, в директориях иных файлов нет


'  Исходные данные  -------------------------------------------------------
iDir = "D:\Всякая дребедень"            ' Директория где обрабатываем файлы

inStrok = "Добавляемая строка 1"        ' Текст добавляемой новой строки
NinStrok = 1                            ' Номер строки в файлах, куда вставим новую строку (если <=0 (или номер строки в файле за его пределами) то не вставляем)

NoutStrok = 1                           ' Номер удаляемой строки в исходном файле (если <=0 (или номер строки в файле за его пределами) то не удаляем)
' -------------------------------------------------------------------------

Call AllFolders(iDir, inStrok, NinStrok, NoutStrok)

' *************************************************************************

Sub AllFolders(iiDir, iinStrok, iNinStrok, iNoutStrok)       ' ---------------------------------------------

Call Ins_Del(iiDir, iinStrok, iNinStrok, iNoutStrok)

Set FSO = CreateObject("Scripting.FileSystemObject")

On Error Resume Next
Set F = FSO.GetFolder(iiDir)

If Err.Number = 0 Then

    Set SubF = F.SubFolders

    For Each Folder In SubF
        Call AllFolders(iiDir + "\" + Folder.Name, iinStrok, iNinStrok, iNoutStrok)
    Next

Else
    a = MsgBox(iiDir + Chr(13) + Chr(10) + Err.Description, 0, "Неудачное открытие папки")
End If

End Sub

Sub Ins_Del(iiDir, iinStrok, iNinStrok, iNoutStrok)       ' ---------------------------------------------

Set FSO = CreateObject("Scripting.FileSystemObject")
Set F = FSO.GetFolder(iiDir)
Set Files = F.Files

For Each ff In Files
'    a = MsgBox(iiDir + "\" + ff.Name)

    Set tFile = FSO.OpenTextFile(iiDir + "\" + ff.Name, 1)
    inText = tFile.ReadAll()
    inText = Replace(inText, Chr(10), "")
    Mass = Split(Replace(inText, Chr(10), ""), Chr(13))
    inText = ""
    tFile.Close
    
    iBeg = LBound(Mass)
    iEnd = UBound(Mass)
'    a = MsgBox(iiDir + "\" + ff.Name + "  " + CStr(iBeg) + "  " + CStr(iEnd))
    
    Set tFile = FSO.OpenTextFile(iiDir + "\" + ff.Name, 2)
    For i = iBeg To iEnd
        If i + 1 = iNinStrok Then
            If i <> iEnd Then
                tFile.WriteLine iinStrok
            Else
                tFile.Write iinStrok
            End If
        End If
    
        If i + 1 <> iNoutStrok Then
            If i <> iEnd Then
                tFile.WriteLine Mass(i)
            Else
                tFile.Write Mass(i)
            End If
        End If
    Next
    tFile.Close

    
Next

End Sub
Если вместо куска кода от начала до строки с ******* вставить
Код: Выделить весь код
' Позволяет 1) Добавить строку в указанную строку всех текстовых файлов директории и поддиректорий
'           2) Удалить указанную по счету строку в текстовых файлах директории и поддиректорий
' Предполагается, что кроме текстовых файлов в директориях нет


'  Аргументы -------------------------------------------------------------------------------------

'  inStrok         ' Текст добавляемой новой строки
'  NinStrok        ' Номер строки в файлах, куда вставим новую строку (если <=0 (или номер строки в файле за его пределами) то не вставляем)

'  NoutStrok       ' Номер удаляемой строки в исходном файле (если <=0 (или номер строки в файле за его пределами) то не удаляем)


'  Исходные данные  ------------------------------------------------------------------------------
iDir = "D:\Всякая дребедень"            ' Директория где обрабатываем файлы
' ------------------------------------------------------------------------------------------------

Set Arg = WScript.Arguments

if Arg.Count = 3 Then

	inStrok = Arg(0)     
	NinStrok =  Arg(1)*1    
	NoutStrok = Arg(2)*1   


	Call AllFolders(iDir, inStrok, NinStrok, NoutStrok)
Else
    	a = MsgBox("Количество аргументов должно быть равно 3, а указано " + CStr(Arg.Count))
End If
и сохранить, например, под именем InsAndDel.vbs
то Ваша задача сведётся к вызову скрипта с разным набором параметров

Вставим в начало строку
InsAndDel.vbs "У попа была собака" 1 0

Удалим первую строку
InsAndDel.vbs "" 0 1

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

Подозреваю, что то, что Вы делаете с файлами между вставкой-удалением строк можно тоже проделать в скрипте.
Это сообщение посчитали полезным следующие участники:

Отправлено: 01:20, 20-09-2009 | #5