PDA

Показать полную графическую версию : [решено] изменить несколько строк в файле


Страниц : [1] 2

man8531
25-06-2018, 18:40
всем привет
не получается изменить три строки в файле конфигурации по найденному в сети батнику:

@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 и вносить это в итоговый файл?

man8531
25-06-2018, 18:55
пытался переменным TMPR присвоить эти значения переменных replacekey, но не получается вывести всё это в файл - он затраивает строки.

megaloman
25-06-2018, 19:13
man8531, Здесь решалась подобная задача (http://forum.oszone.net/thread-327297.html)
Но, однако, хотелось бы видеть исходный файл полностью, и, если возможно, переименуйте его в .txt и предоставьте для возможности предметного ответа. Подробнее опишите, что надо менять.

Iska
25-06-2018, 19:22
хотелось бы видеть исходный файл полностью, »
man8531, именно так: упакуйте Ваш файл конфигурации в архив и прикрепите последний к сообщению.

man8531
25-06-2018, 19:26
файл во вложении

man8531
25-06-2018, 19:31
Подробнее опишите, что надо менять. »
необходимо заменить в файле конфигурации: ip адрес - с переменной findip на replaceip; имя сертификата - переменная findcrt на replacecrt; имя ключа - переменная findkey на replacekey

Iska
25-06-2018, 19:54
man8531, Ваш файл конфигурации — в кодировке UTF-8 без BOM и с концами строк в формате Unix. Вас устроит PowerShell?

man8531
25-06-2018, 19:57
Вас устроит PowerShell? »
если это будет прекрасно работать в Windows ХР и будет возможно запустить с основного батника автоустановки программ, то - да, пойдёт.

Iska
25-06-2018, 20:05
если это будет прекрасно работать в Windows ХР »
Прекрасно — не будет. По умолчанию там вообще нет PowerShell, и максимальная версия, которую можно установить на Windows XP — 2.0.

если нужно, я смогу переделать файл, как Вам удобнее. »
А причём тут — переделать? Есть файл определённого формата, и работать надо с ним.

В общем, я не знаю, что Вам тут посоветовать. Разве что портированный под Windows sed (https://ru.wikipedia.org/wiki/Sed) использовать. Ни пакетные файлы, ни, скорее всего, WSH в данном случае (при условии сохранения оригинального формата файла) не помогут.

man8531
25-06-2018, 20:13
В общем, я не знаю, что Вам тут посоветовать. »
хорошо, я Вас понял. значит будем некоторые моменты корректировать ручками. не всё коту масленица =)
спасибо

Iska
25-06-2018, 21:00
хорошо, я Вас понял. »
Не поняли. Я же пишу — портированный sed. Знающие коллеги напишут Вам код.

man8531
25-06-2018, 21:42
Iska,
я сторонник встроенных в систему средств. если так не получается, то пусть не будет никак. вопрос данный не настолько критичен, чтобы к нему проявлять слишком должного внимания. опенвпн у меня стоит всего на пяти машинах - ручками настрою.

Iska
25-06-2018, 21:51
man8531, а что мешает положить тот же sed с библиотеками на тот же самый носитель, с которого Вы будете делать автоустановку, и пользоваться? Ровно так же, как Вы наверняка пользуете и другие сторонние средства для автоустановки? Ничего не мешает.

man8531
26-06-2018, 05:11
Ровно так же, как Вы наверняка пользуете и другие сторонние средства для автоустановки? »
только для правки некоторых .msi, а во всём остальном: start / wait ..... ну или условие какое, если битность системы отличается от x86.

но, если есть у кого желание возиться с sed, то я непременно возьму это средство на вооружение. можете даже на повер шелл написать, так как неминуемо близится конец для машин с Windows XP.

Iska
26-06-2018, 05:36
man8531, я тут подумал о паре вещей:

Разве Вам нужна замена? Вы ведь целиком и полностью переписываете целевой файл, не так ли? Так что мешает, не делая никаких замен, просто его создавать?
В принципе, поскольку из кириллицы у Вас в файле только комментарии, мы можем наплевать на UTF-8, открывая его как ANSI/1251 (поскольку он как раз без BOM), и концы строк — работая с файлом, не как с коллекцией строк, а как с единым целым.

man8531
26-06-2018, 07:00
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Входящий и исходящий файл может быть один и тот же

man8531
26-06-2018, 11:42
megaloman,
да, всё прекрасно работает, спасибо!

man8531
26-06-2018, 12:35
megaloman,
вот ведь какая незадача: переместил я скрипт в папку script и он не может найти тот конфигурационный файл, тк в качестве корневого каталога он уже задаёт каталог script. как сделать так, чтобы он в качестве корня каталога всегда выбирал каталог autoinstall? в этом каталоге и расположены все остальные. конкретный путь не подойдёт, так как хочется, чтобы каталог был перемещаем и всё в нём работало.

Iska
26-06-2018, 14:02
man8531, покажите структуру каталогов. Конкретно интересует взаиморасположение каталогов script и other\openvpn\conf.




© OSzone.net 2001-2012