Вот решение проблемы с помощью 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
Естественно, можно это проделывать с любой другой строкой.
Как Вам было нужно, это проделывается для всех файлов в директории и поддиректориях, прописанных в скрипте.
Предполагается, что там содержатся только текстовые файлы с произвольным расширением.
Подозреваю, что то, что Вы делаете с файлами между вставкой-удалением строк можно тоже проделать в скрипте.