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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] изменить несколько строк в файле

Ответить
Настройки темы
CMD/BAT - [решено] изменить несколько строк в файле

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


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

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


всем привет
не получается изменить три строки в файле конфигурации по найденному в сети батнику:
Код: Выделить весь код
@echo off
setlocal enabledelayedexpansion
Set infile=%~dp0\other\openvpn\conf\client.ovpn
Set infileout="%ProgramFiles%\OpenVPN\config\client.ovpn"
Set findip=ipaddress
Set findcrt=user.crt
Set findkey=user.key
Set replaceip=192.168.0.1 1194
Set replacecrt=%computername%.crt
Set replacekey=%computername%.key
@echo off
setlocal enabledelayedexpansion
set COUNT=0
for /F "tokens=* delims=" %%n in (!infile!) do (
set LINE=%%n
set TMPR=!LINE:%findip%=%replaceip%!
Echo !TMPR!>>TMP.TXT
)
move /Y TMP.TXT %infileout%
exit
как заставить этот батник искать строки указанные в переменных replacekey и replacecrt и вносить это в итоговый файл?

Отправлено: 18:40, 25-06-2018

 

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


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

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


Изображения
Тип файла: png Снимок.PNG
(3.2 Kb, 6 просмотров)

так пойдёт?
корень всего - каталог autoinstall

Последний раз редактировалось man8531, 26-06-2018 в 14:46.


Отправлено: 14:40, 26-06-2018 | #21



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

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


Ветеран


Contributor


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

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


man8531, Я ориентировался на Ваш код - скрипт расположен в той же папке, что и папка other.
Если скрипт и папка other расположены на одном диске (причём имя и вложенность папки не имеет значения), то для пути
Диск:\other\openvpn\conf\client.ovpn
замените строку
Код: Выделить весь код
FileIn = FSO.GetDriveName(WScript.ScriptFullName) + "\other\openvpn\conf\client.ovpn"
Цитата man8531:
корень всего - каталог autoinstall »
Или, если я правильно понял, так
Код: Выделить весь код
FileIn = FSO.GetDriveName(WScript.ScriptFullName) + "\autoinstall\other\openvpn\conf\client.ovpn"

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 26-06-2018 в 16:04.


Отправлено: 15:55, 26-06-2018 | #22


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


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

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


megaloman,
не помогает, говорит, что не найден путь до переменной FileIn
наверное, я делаю что-то не так или некорректно объясняю: мой каталог установки (autoinstall), будет располагаться где угодно - рабочий стол, папка загрузок и тд. в батниках я использую переменную %~dp0 для обозначения исходной папки, откуда всё запускается. у меня один большой батник, который производит установку программ и конфигурирует некоторые конфиги с помошью доп батников или скриптов, вроде Вашего. так вот, сейчас я поместил в главный батник, что лежит в корне каталога autoinstall, строку:
Код: Выделить весь код
%~dp0script\openvpn_Ethernet.vbs
он, с админскими правами, запускает Ваш скрипт, что лежит в каталоге \autoinstall\script\openvpn_Ethernet.vbs
сам каталог autoinstall сейчас находится на рабочем столе.

наверное, в этом случае придётся ложить конфиги в папку script. потому, как я понял, головным каталогом скрипт распознаёт script

в этом виде он отрабатывает всё без проблем, если конфиг опенвпн поместить в каталог script
Скрытый текст
Код: Выделить весь код
Set FSO = CreateObject("Scripting.FileSystemObject")

FileIn = FSO.GetParentFolderName(WScript.ScriptFullName) + "\openvpn\conf\client.ovpn"
FileOut = CreateObject("WScript.Shell").ExpandEnvironmentStrings("%PROGRAMFILES%") + "\OpenVPN\config\client.ovpn"

' MsgBox FileIn + vbCrLf + FileOut

ComputerName = CreateObject("WScript.Network").ComputerName

Dim What(2), Rep(2)
What(0) = "ipaddress"
What(1) = "user.crt"
What(2) = "user.key"

Rep(0) = "192.168.0.1 1194"
Rep(1) = ComputerName + ".crt"
Rep(2) = ComputerName + ".key"

' MsgBox What(0) + vbTab + Rep(0) + vbCrLf + What(1) + vbTab + Rep(1) + vbCrLf + What(2) + vbTab + Rep(2)

Set fIn = FSO.OpenTextFile(FileIn, 1, False)  ', -2)
Alls = fIn.ReadAll
fIn.Close

For i = 0 To UBound(What)
    Alls = Replace(Alls, What(i), Rep(i))
Next

Set fIn = FSO.CreateTextFile(FileOut, True)
fIn.Write Alls
fIn.Close

Последний раз редактировалось man8531, 26-06-2018 в 17:00.


Отправлено: 16:39, 26-06-2018 | #23


Ветеран


Contributor


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

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


Цитата man8531:
мой каталог установки (autoinstall), »
Я не понимаю, как соотносится каталог autoinstall с каталогом other и каталогом Script. Из той картинки ничего не понятно. Там autoinstall нет вообще.

Кстати, а наверное необходимо писАть путь в кавычках, в любом случае они не мешают.
"%~dp0script\openvpn_Ethernet.vbs"

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 26-06-2018 в 18:22.


Отправлено: 17:47, 26-06-2018 | #24


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


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

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


Изображения
Тип файла: png Снимок.PNG
(6.7 Kb, 4 просмотров)

Цитата megaloman:
Из той картинки ничего не понятно. Там autoinstall нет вообще. »
моя оплошность. прикладываю более полную картинку. но я писал, что: корень всего - каталог autoinstall. а сам он может располагаться где угодно.
Цитата megaloman:
Кстати, а наверное необходимо писАть путь в кавычках, в любом случае они не мешают. »
по правилам хорошего тона - да. но эти кавычки добавляют лишний слэш иногда, вот и не ставлю их периодически. там и пробелов в пути нет.

Отправлено: 18:48, 26-06-2018 | #25


Ветеран


Contributor


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

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


man8531, Я слегка запутался, иду по пути наименьшего сопротивления:
Батник:
Код: Выделить весь код
@Echo Off

Set "infile=%~dp0other\openvpn\conf\client.ovpn"
Set "infileout=%ProgramFiles%\OpenVPN\config\client.ovpn"

"%~dp0script\openvpn_Ethernet.vbs" "%infile%" "%infileout%"
.vbs
Код: Выделить весь код
With WScript.Arguments
    If .Count < 2 Then WScript.Quit 1
	FileIn = .Item(0)
	FileOut = .Item(1)
End With

' MsgBox FileIn + vbCrLf + FileOut

ComputerName = CreateObject("WScript.Network").ComputerName

Dim What(2), Rep(2)
What(0) = "ipaddress"
What(1) = "user.crt"
What(2) = "user.Key"

Rep(0) = "192.168.0.1 1194"
Rep(1) = ComputerName + ".crt"
Rep(2) = ComputerName + ".key"

Set FSO = CreateObject("Scripting.FileSystemObject")

Set fIn = FSO.OpenTextFile(FileIn, 1, False)  ', -2)
Alls = fIn.ReadAll
fIn.Close

For i = 0 To UBound(What)
    Alls = Replace(Alls, What(i), Rep(i))
Next

Set fIn = FSO.CreateTextFile(FileOut, True)
fIn.Write Alls
fIn.Close

WScript.Quit 0
Если не поленюсь, напишу батник скомбинированный с .js, чтобы не иметь отдельный файл со скриптом.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 18:56, 26-06-2018 | #26


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


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

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


megaloman,
если всё сложно, то и не стоит оно того. я, думал, что пару символов добавил и всё, а тут симбиоз уже намечается какой-то.

upd
в общем решил вопрос двумя шаблонами, которые будут копироваться в каталог программы, в зависимости от потребности. а остальные два параметра руками потом поправлю.

upd
а лучше, чтобы труды не пропали, размещу конфиги в папке со скриптами, там они будут их отрабатывать.

upd
положил - всё отлично отрабатывают! спасибо!

Последний раз редактировалось man8531, 26-06-2018 в 21:02.


Отправлено: 19:36, 26-06-2018 | #27


Ветеран


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

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


megaloman, можно просто использовать относительный путь — из script вверх, в родительский каталог, а затем вниз к other и т.д.:
Код: Выделить весь код
FileIn = FSO.GetParentFolderName(WScript.ScriptFullName) + "\..\other\openvpn\conf\client.ovpn"
Я не проверял, но должно работать.
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:54, 26-06-2018 | #28


Ветеран


Contributor


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

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


man8531,
Вот батник, совмещенный с js. Всё в одном файле. Батник должен быть в рядом с папкой other. У меня всё это хозяйство в папке autoinstall, которая на рабочем столе. Работает.
Всё ваше дополнительное батниковаяние, если надо, должно происходить между имеющимися
/* */
Код: Выделить весь код
@set @E=1; /*

@Echo Off

Set "infile=%~dp0other\openvpn\conf\client.ovpn"
Set "infileout=%ProgramFiles%\OpenVPN\config\client.ovpn"

cscript //NoLogo /E:jscript "%~dpnx0" "%infile%" "%infileout%"
GoTo :Eof

*/
var oArg = WScript.Arguments;
var FSO = WScript.CreateObject("Scripting.FileSystemObject");

var FileIn = oArg(0);
var FileOut = oArg(1);
var ComputerName = WScript.CreateObject("WScript.Network").ComputerName;

var What = new Array(2);
var Rep = new Array(2);

What[0] = "ipaddress";
What[1] = "user.crt";
What[2] = "user.key";

Rep[0] = "192.168.0.1 1194";
Rep[1] = ComputerName + ".crt";
Rep[2] = ComputerName + ".key";

var fIn = FSO.OpenTextFile(FileIn, 1, false);
var Alls = fIn.ReadAll();
fIn.Close();

for (i=0; i<What.length; i++) {Alls = Alls.replace(What[i],Rep[i]);}

fIn = FSO.CreateTextFile(FileOut, true);
fIn.Write(Alls);
fIn.Close();

WScript.Quit(0);
Iska, Спасибо, непременно попробую разобраться.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 23:50, 26-06-2018 | #29


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


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

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


Цитата Iska:
FileIn = FSO.GetParentFolderName(WScript.ScriptFullName) + "\..\other\openvpn\conf\client.ovpn" »
это ключ к решению проблемы с каталогом script - всё заработало как и задумано. спасибо всем большое!

Отправлено: 06:27, 27-06-2018 | #30



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] изменить несколько строк в файле

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Изменение строк в файле Nikugorsk Скриптовые языки администрирования Windows 13 08-06-2018 18:32
CMD/BAT - Найти текст в файле и вставить над ним несколько строк Sergey.l Скриптовые языки администрирования Windows 7 28-01-2018 23:06
CMD/BAT - [решено] Найти текст в файле и вставить над ним несколько строк Sergey.l Скриптовые языки администрирования Windows 5 27-12-2017 18:47
CMD/BAT - Нумерация строк в файле ВиталийВ Скриптовые языки администрирования Windows 2 25-09-2015 19:06
VBS/WSH/JS - Удаление строк в REG файле gen0m.rsw Скриптовые языки администрирования Windows 9 28-09-2011 18:03




 
Переход