 |
|
vodashk@vk |
02-07-2023 23:27 3011418 |
Замена одного текста на другой включая кавычки путем VBS через запуск команды в коман
Замена одного текста на другой включая кавычки путем VBS
Доброго Всем, как выполнить решение замены текста, включая те где содержат еще и кавычки
текст в файле
MAX_num=10 заменить на MAX_num=auto (замена происходит)
max_time="600" заменить на max_time="0" (замена не происходит)
Есть запуск файла VBS через cmd но он е обрабатывает текст где есть кавычки
Код:
@echo off & title replace & color 1F
setlocal
prompt $G
cscript //Nologo replace.vbs "default_temp" "max_time="600"" "max_time="0""
cscript //Nologo replace.vbs "default_temp" "MAX_num=10" "MAX_num=auto"
cscript //Nologo replace.vbs "default_temp" "use_net=no" "use_net=1"
cscript //Nologo replace.vbs "default_temp" "rom_on=off" "rom_on=on"
Есть файл VBS с именем replace.vbs с кодом замены текста с одного на другой в файле, где по видимому нужно дописать функцию обработки текста с кавычками
Код:
Const ForReading = 1
Const ForWriting = 2
strFileName = Wscript.Arguments(0)
strOldText = Wscript.Arguments(1)
strNewText = Wscript.Arguments(2)
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(strFileName, ForReading)
strText = objFile.ReadAll
objFile.Close
strNewText = Replace(strText, strOldText, strNewText)
Set objFile = objFSO.OpenTextFile(strFileName, ForWriting)
objFile.Write strNewText 'WriteLine adds extra CR/LF
objFile.Close
|
Serguei Kouzmine |
03-07-2023 01:24 3011423 |
перепишите или напишите с нуля заменитель текста на повершелл
это
будет легче чем обучить вбскрипт не глотать кавычки в агрументах
|
vodashk@vk |
03-07-2023 01:46 3011425 |
и в powershell не вышло у меня)
|
Serguei Kouzmine |
03-07-2023 02:20 3011426 |
пробуйте сильнее
Код:
'num="100"' -replace 'num=\"100\"' , 'num = "0"'
num = "0"
Код:
'num="100"' -replace 'num="100"' , 'nu
m = "0"'
num = "0"
- уверяю вас vbscript с кавычками это тупик
|
vodashk@vk |
03-07-2023 02:52 3011427 |
пока мучался сам сделал, зашел сюда потом увидел у вас, а я правильно сделал целиком код и текст не нарушится? Думал поделиться с ответом решением через cmd
PowerShell -Command "(gc "default_temp") -replace 'max_time=\"600\"' , 'max_time=\"0\"' | sc "default_temp""
и вопрос он не портит кодировку и текст оставляет в той же кодировке как и был и не портит его содержимое
А так то результат положительный
|
Serguei Kouzmine |
03-07-2023 05:54 3011432 |
Цитата:
Цитата vodashk@vk
вопрос он не портит кодировку и текст оставляет в той же кодировке как и был »
|
- помомум незачем давать ему шанс что нибудь испортить - если можете укажите кодировку явно
и скрипт по моему всегда лучше чем вводить все в комадной строке поэтому подозреваю такое увлечение алиасами
|
в cmd кавычки внутри кавычек экранируют обычно дублированием "max_time=""0"""
|
Serguei Kouzmine |
03-07-2023 15:36 3011448 |
Sham,
попробуйте добавить в скрипт
Код:
WScript.echo strOldText
увидите
Код:
cscript /Nologo replace.vbs "a.txt" "max_time=""600""" "max_time=""0"""
кавычки исчезли
|
да, реальная проблема. Я бы заменил на двойные одинарные '' ("max_time=''600''") и в скрипте менял бы replace'ом: replace(Wscript.Arguments(1), "''", """"). На SO вообще предлагают лезть в Win32_Process за исходной строкой - это на любителя.
|
vodashk@vk |
18-07-2023 00:04 3012519 |
Sham, туда же и меня направило)
помог искусственный интеллект с ответом как ни странно
взялся за такую строку и решил сменить, все получилось
max_time="60" с этим получилось
при этом другие значения не затрагиваются
типа таких
mode="0"
mode='60'
mode=60
mode='600'
mode="600"
"60"
'60'
батник
Код
Код:
@echo off
cscript //NoLogo replace.vbs "config.xml" "max_time='60'" "max_time='0'"
pause
vbs
HTML код:
Код
Dim filePath, searchString, replaceString
filePath = WScript.Arguments.Item(0)
searchString = Replace(WScript.Arguments.Item(1), "'", Chr(34))
replaceString = Replace(WScript.Arguments.Item(2), "'", Chr(34))
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(filePath)
strContent = objFile.ReadAll
objFile.Close
strContent = Replace(strContent, searchString, replaceString)
Set objFile = objFSO.OpenTextFile(filePath, 2)
objFile.Write strContent
objFile.Close
|
DJ Mogarych |
18-07-2023 11:03 3012549 |
Значение, которое будет заменено, совершенно не нужно получать из файла, вряд ли в файле есть несколько одинаковых параметров.
Powershell
Код:
function replace-conf ($in,$key,$value) {
$in -replace "$key=.*","$key=$value"
}
$txt = gc "D:\temp\log1.txt"
$txt = replace-conf $txt 'max_time' '"auto"'
$txt = replace-conf $txt 'MAX_num' '"999"'
$txt
|
Время: 23:20.
© OSzone.net 2001-