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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - Нужно быстро (!) добавить/удалить строку во все файлы указанной директории

Ответить
Настройки темы
Любой язык - Нужно быстро (!) добавить/удалить строку во все файлы указанной директории

Новый участник


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

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


Нужно быстро (!) добавить/удалить строку во все файлы указанной (жестко- в тексте самого скрипта) директории и всех поддиректорий.
Строка должна быть добавлена в начало файла. Файлы текстовые, но имеющие отличное от txt расширение.

Отправлено: 20:27, 16-09-2009

 

Googler


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

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


Цитата Possessed:
Строка должна быть добавлена в начало файла »
а как тогда насчет "удалить"?..

Отправлено: 11:07, 18-09-2009 | #2



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

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


Новый участник


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

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


1) Добавить нужную строку в начало файла
2) Произвести некоторые действия с целевым файлом (это уже не средствами бат файла )
2) Удалить добавленную в шаге один строку из начала файла

То есть - нужны два батника, один из которых добавляет, а второй удаляет нужную строку.

Отправлено: 07:33, 19-09-2009 | #3


Аватара для gora

Ушёл из жизни


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

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


Цитата Possessed:
Добавить нужную строку в начало файла »
Код: Выделить весь код
Echo Текст добавляемой строки > temp.txt
rem добавляем ее в начало файла test.txt и результат записываем в Out.txt
Copy /A temp.txt + /A test.txt /A Out.txt
Если в шаге 3 нужен файл идентичный исходному, то его проще сохранить (переименовав, например), а затем восстановить.
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:13, 19-09-2009 | #4


Ветеран


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


Новый участник


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

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


А у меня не много другая задача, нужно вставить строки в определенные разделы, не поможете?
Нужно вставить в раздел [EntryKey] еще одну строчку Item99=, а в [Router2] Item99=xxx например, впрочем можно просто повторить скрипт для каждого раздела.

[EntryKey]
Item1=
Item2=
Item3=
Item4=

[Router2]
Item1=
Item2=
Item3=
Item4=

Отправлено: 15:43, 04-10-2011 | #6


Ветеран


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

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


Birdimson, если у Вас именно INI-файл, то надёжнее и проще всего использовать методы «.Ini*()» объекта AutoItX.
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:29, 04-10-2011 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - Нужно быстро (!) добавить/удалить строку во все файлы указанной директории

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBS/WSH/JS - Добавить строку в VBS скрипт antonhacktm Скриптовые языки администрирования Windows 5 14-12-2009 18:40
Интерфейс - [решено] Нужно отобразить все пустые папки в директории Третий Microsoft Windows 7 1 24-08-2009 22:17
Как удалить все временный файлы (уже после перезагрузки компа)...? Cobra_1_Stas Автоматическая установка Windows 2000/XP/2003 4 01-04-2008 07:14
[решено] как добавить путь к текущей директории в reg файл из bat файла ? mitiya Автоматическая установка приложений 7 27-03-2008 16:12
Поиогите Удалить две директории t0lkman Microsoft Windows 2000/XP 9 25-06-2007 10:00




 
Переход