Показать полную графическую версию : [решено] изменить несколько строк в файле
всем привет
не получается изменить три строки в файле конфигурации по найденному в сети батнику:
@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 и вносить это в итоговый файл?
пытался переменным TMPR присвоить эти значения переменных replacekey, но не получается вывести всё это в файл - он затраивает строки.
megaloman
25-06-2018, 19:13
man8531, Здесь решалась подобная задача (http://forum.oszone.net/thread-327297.html)
Но, однако, хотелось бы видеть исходный файл полностью, и, если возможно, переименуйте его в .txt и предоставьте для возможности предметного ответа. Подробнее опишите, что надо менять.
хотелось бы видеть исходный файл полностью, »
man8531, именно так: упакуйте Ваш файл конфигурации в архив и прикрепите последний к сообщению.
Подробнее опишите, что надо менять. »
необходимо заменить в файле конфигурации: ip адрес - с переменной findip на replaceip; имя сертификата - переменная findcrt на replacecrt; имя ключа - переменная findkey на replacekey
man8531, Ваш файл конфигурации — в кодировке UTF-8 без BOM и с концами строк в формате Unix. Вас устроит PowerShell?
Вас устроит PowerShell? »
если это будет прекрасно работать в Windows ХР и будет возможно запустить с основного батника автоустановки программ, то - да, пойдёт.
если это будет прекрасно работать в Windows ХР »
Прекрасно — не будет. По умолчанию там вообще нет PowerShell, и максимальная версия, которую можно установить на Windows XP — 2.0.
если нужно, я смогу переделать файл, как Вам удобнее. »
А причём тут — переделать? Есть файл определённого формата, и работать надо с ним.
В общем, я не знаю, что Вам тут посоветовать. Разве что портированный под Windows sed (https://ru.wikipedia.org/wiki/Sed) использовать. Ни пакетные файлы, ни, скорее всего, WSH в данном случае (при условии сохранения оригинального формата файла) не помогут.
В общем, я не знаю, что Вам тут посоветовать. »
хорошо, я Вас понял. значит будем некоторые моменты корректировать ручками. не всё коту масленица =)
спасибо
хорошо, я Вас понял. »
Не поняли. Я же пишу — портированный sed. Знающие коллеги напишут Вам код.
Iska,
я сторонник встроенных в систему средств. если так не получается, то пусть не будет никак. вопрос данный не настолько критичен, чтобы к нему проявлять слишком должного внимания. опенвпн у меня стоит всего на пяти машинах - ручками настрою.
man8531, а что мешает положить тот же sed с библиотеками на тот же самый носитель, с которого Вы будете делать автоустановку, и пользоваться? Ровно так же, как Вы наверняка пользуете и другие сторонние средства для автоустановки? Ничего не мешает.
Ровно так же, как Вы наверняка пользуете и другие сторонние средства для автоустановки? »
только для правки некоторых .msi, а во всём остальном: start / wait ..... ну или условие какое, если битность системы отличается от x86.
но, если есть у кого желание возиться с sed, то я непременно возьму это средство на вооружение. можете даже на повер шелл написать, так как неминуемо близится конец для машин с Windows XP.
man8531, я тут подумал о паре вещей:
Разве Вам нужна замена? Вы ведь целиком и полностью переписываете целевой файл, не так ли? Так что мешает, не делая никаких замен, просто его создавать?
В принципе, поскольку из кириллицы у Вас в файле только комментарии, мы можем наплевать на UTF-8, открывая его как ANSI/1251 (поскольку он как раз без BOM), и концы строк — работая с файлом, не как с коллекцией строк, а как с единым целым.
Iska,
1. ничто не мешает
2. можем наплевать
megaloman
26-06-2018, 09:57
man8531, Set FSO = CreateObject("Scripting.FileSystemObject")
FileIn = FSO.GetParentFolderName(WScript.ScriptFullName) + "\other\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Входящий и исходящий файл может быть один и тот же
megaloman,
да, всё прекрасно работает, спасибо!
megaloman,
вот ведь какая незадача: переместил я скрипт в папку script и он не может найти тот конфигурационный файл, тк в качестве корневого каталога он уже задаёт каталог script. как сделать так, чтобы он в качестве корня каталога всегда выбирал каталог autoinstall? в этом каталоге и расположены все остальные. конкретный путь не подойдёт, так как хочется, чтобы каталог был перемещаем и всё в нём работало.
man8531, покажите структуру каталогов. Конкретно интересует взаиморасположение каталогов script и other\openvpn\conf.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC