Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] VBS скрип по редактированию .ORA файла (http://forum.oszone.net/showthread.php?t=327080)

ospekt00 26-05-2017 08:06 2739746

VBS скрип по редактированию .ORA файла
 
Вложений: 1
Добрый день Форумчане, есть такой вопрос, можно ли на VBS открыть файл .ORA (в частности listener.ora файл с настройками базы данных oracle XE), сам данный файл можно открыть и отредактировать блокнотом, нужно его открыть и дописать в конец файла некое содержимое. Как это можно сделать на VBS???
Файл есть во вложении.

greg zakharov 26-05-2017 09:33 2739764

Цитата:

Цитата ospekt00
дописать в конец файла некое содержимое

Видимо айпишник хоста и имя БД...
Код:

Dim objFSO : Set objFSO = CreateObject("Scripting.FileSystemObject")
Dim objFile : Set objFile = objFSO.OpenTextFile("listner.ora", 8, False)
objFile.Write "blablabla"
objFile.Close
Set objFile = Nothing
Set objFSO = Nothing


ospekt00 26-05-2017 10:24 2739769

Спасибо за ответ, а можно ли дописать что то после определенной строки, например после 8 строки от начала файла?

greg zakharov 26-05-2017 10:35 2739772

Инжекта строки "на лету", насколько помню, в Васе нет, но это можно преодолеть, скажем, считав файл целиком и разбив его на массив строк с последующей "вставкой" в него нужной строки.

ospekt00 26-05-2017 10:38 2739777

Можете показать пример того как это можно сделать?
Заранее благодарю!

Iska 26-05-2017 10:55 2739788

Цитата:

Цитата ospekt00
а можно ли дописать что то после определенной строки, »

Дописывать отдельной строкой?

Цитата:

Цитата ospekt00
например после 8 строки от начала файла? »

Как быть, если строк окажется только, скажем, пять?

ospekt00 26-05-2017 10:59 2739790

В данном файле listener.ora строк 23, вообще нужно дописать после 12 строки еще 6 строк. Можно было бы файл заменять полностью, файлом с нужным содержимым, но так как ПК с такими файлами много и имена ПК все разные то либо дописывать нужное после определенной строки, ли переписывать файл полность и по том в нужном месте еще заменять инфу с именем ПК.

greg zakharov 26-05-2017 15:16 2739848

Цитата:

Цитата ospekt00
Можете показать пример того как это можно сделать?

Честно, Васю практически не использовал, в основном налегал на JScript, решение на котором будет примерно таким:
Код:

with (new ActiveXObject('Scripting.FileSystemObject')) {
  var file = OpenTextFile('E:\\oracle\\admin\\network\\listner.ora', 1, false),
      arr = file.ReadAll().split('\r\n'),
      ins = [
        '\nстроки, которые должны быть вставлены',
        'могут быть представлены либо в виде',
        'массива строк, либо в виде JSON\n'
      ].join('\n'),
      res = arr.slice(0, 3).join('\n') + ins +
            arr.slice(3, arr.length).join('\n');
  file.Close();
 
  file = OpenTextFile('E:\\oracle\\admin\\network\\listner.ora', 2, false);
  file.Write(res);
  file.Close();
}

Выглядит не очень эстетично, но Вам же пример нужен, а не выхоленный код, верно? Здесь вставка идет начиная с третьей строки. Если будут вопросы, отвечу как освобожусь.

ospekt00 26-05-2017 15:45 2739857

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


Dim fso
Const OverWriteFiles = True
Set fso = CreateObject("Scripting.FileSystemObject")
Set WshShell = WScript.CreateObject("WScript.Shell")
lsaptPathx = "c:\bat1"
lsoraPathx = "c:\bat"

FSO.CopyFile (lsaptPathx) , (lsoraPathx) & "\", OverWriteFiles

dim objnet
Set objnet = wscript.CreateObject("wscript.network")

Const ForReading = 1
Const ForWriting = 2

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFileLis = objFSO.OpenTextFile("c:\BAT\listener.ora", ForReading)

strText = objFileLis.ReadAll
objFileLis.Close

strOldText = "pcbd"
strNewText = objNet.ComputerName

strNewText = Replace(strText, strOldText, strNewText)

Set objFileLis = objFSO.OpenTextFile("c:\BAT\listener.ora", ForWriting)
objFileLis.WriteLine strNewText
objFileLis.Close

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

Iska 26-05-2017 22:16 2739945

Цитата:

Цитата greg zakharov
Выглядит не очень эстетично, »

Зато дёшево надёжно и практично! - YouTube :).

На самом деле вполне себе эстетично.
Цитата:

Цитата greg zakharov
Код:

      res = arr.slice(0, 3).join('\n') + ins +
            arr.slice(3, arr.length).join('\n');

»

выглядит вполне понятно и наглядно — берём три первых строки, «клеим» к ним вставку, к полученному «клеим» остаток строк.


Время: 02:59.

Время: 02:59.
© OSzone.net 2001-