|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Замена текста с помощью VBScript при условии?! |
|
VBS/WSH/JS - Замена текста с помощью VBScript при условии?!
|
Новый участник Сообщения: 13 |
Профиль | Отправить PM | Цитировать Здравствуйте, пытаюсь реализовать скрипт который будет находить нужное мне значение например 1134 и заменять на 1401 при условии что 1134 должно находится между dota_camera_pitch_max и dota_camera_distance.
Const ForReading = 1 Const ForWriting = 2 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile("C:\1111\client.dll", ForReading) strText = objFile.ReadAll objFile.Close strNewText = Replace(strText, "1134", "1401") Set objFile = objFSO.OpenTextFile("C:\1111\client.dll", ForWriting) objFile.WriteLine strNewText objFile.Close |
|
Отправлено: 07:53, 10-08-2018 |
Новый участник Сообщения: 13
|
Профиль | Отправить PM | Цитировать Iska, Спасибо что помогаете. вот скриншот
|
Отправлено: 14:28, 13-08-2018 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Hraniti, не нахожу. Контрольные суммы выложенного client.dll приведите.
CRC32: 1453ECB7 MD5: 22A7A67509A454059CC83D58B0A6B0B5 SHA1: 07DA4D35F4CA0B3F2A1FAF95D9E76D210A38D919 SHA256: 4BD116EF090741FCF1CB08388BCDCB80859558E82826C4433BD7DB3616443B4B |
Отправлено: 14:54, 13-08-2018 | #12 |
Новый участник Сообщения: 13
|
Профиль | Отправить PM | Цитировать Iska, Откройте через Notepad++
|
Отправлено: 17:20, 13-08-2018 | #13 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Hraniti, я открывал и через Notepad++. Нету.
Мы можем долго играть в угадайку. Повторяю: приведите контрольные суммы для файла client.dll и укажите точное значение смещения, где находится 1134 (или dota_camera_pitch_max, или dota_camera_distance). |
Отправлено: 18:04, 13-08-2018 | #14 |
Новый участник Сообщения: 13
|
Профиль | Отправить PM | Цитировать Iska, понял. на всякий случай перезалил файл https://yadi.sk/d/UnQmDTD43aCgLd
Вот данные контрольной суммы. MD5: 4DD79EB8E0EB3DF55618C1145CED6AB8 SHA1: 24E680C045016DB05F291D8B9588275659BE6821 SHA256: A09E4A300F16AF502095CC0B9D8A3193D8499E4676BA5736BA94213FD334B446 Если открыть notepad без переноса строк, интересующая информация содержится на 290877 строчке. Скриншот notepad++ с данными с точным нахождением данных прилагаю. Пустота вокруг 1134 это знак NUL. |
Отправлено: 07:36, 14-08-2018 | #15 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Hraniti:
На PowerShell это может выглядеть так: $sPath2Client = 'C:\Мои проекты\0183\client.dll'
if([System.IO.File]::Exists($sPath2Client)) {
$sContent = Get-Content -Path $sPath2Client -Raw
$oRegExp = [System.Text.RegularExpressions.Regex]::new('(dota_camera_pitch_max\x00{3})1134(\x00{4}dota_camera_distance)')
if($oRegExp.IsMatch($sContent)) {
$oRegExp.Replace($sContent, '${1}1401${2}') | Set-Content -Path $sPath2Client -NoNewline
} else {
Write-Host "Can't find pattern [$oRegExp] in source file [$sPath2Client]." -ForegroundColor Red
}
} else {
Write-Host "Can't find source file [$sPath2Client]." -ForegroundColor Red
}
|
|
Последний раз редактировалось Iska, 14-08-2018 в 12:20. Причина: Выравнивание кода Отправлено: 09:28, 14-08-2018 | #16 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать На WSH:
Скрытый текст
Option Explicit Const strPath2Client = "C:\Мои проекты\0183\client.dll" Const adTypeBinary = 1 Const adTypeText = 2 Const adSaveCreateOverWrite = 2 Const intBufferSize = 512 Const strFindString = "1134" Const strReplaceString = "1401" Dim strPattern Dim strBlockSignature Dim strContent Dim lngFileSize Dim i Dim arrContent() Dim lngFoundPosition strPattern = "dota_camera_pitch_max" & String(3, Chr(0)) & strFindString & String(4, Chr(0)) & "dota_camera_distance" strBlockSignature = ConvertByteArray2HexString(ConvertString2ByteArray(strPattern)) With WScript.CreateObject("Scripting.FileSystemObject") If .FileExists(strPath2Client) Then WScript.StdOut.WriteLine "Source file [" & strPath2Client & "] exists." lngFileSize = .GetFile(strPath2Client).Size With WScript.CreateObject("ADODB.Stream") .Type = adTypeBinary .Open WScript.StdOut.WriteLine "Read content." .LoadFromFile(strPath2Client) ReDim arrContent(lngFileSize \ intBufferSize) For i = 0 To lngFileSize - 1 Step intBufferSize arrContent(i \ intBufferSize) = ConvertByteArray2HexString(.Read(intBufferSize)) WScript.StdOut.Write "Convert content into hex string: " & FormatNumber(i / (lngFileSize - 1) * 100, 2) & "%" & vbCr Next WScript.StdOut.WriteLine strContent = Join(arrContent, "") lngFoundPosition = InStr(strContent, strBlockSignature) If lngFoundPosition > 0 Then WScript.StdOut.WriteLine "Search pattern [" & strPattern & "] found." .Position = lngFoundPosition \ 2 WScript.StdOut.WriteLine "Write new content [" & Replace(strPattern, strFindString, strReplaceString) & "] into source file [" & strPath2Client & "]." .Write ConvertString2ByteArray(Replace(strPattern, strFindString, strReplaceString)) .SaveToFile strPath2Client, adSaveCreateOverWrite .Close Else WScript.StdOut.WriteLine "Can't find search pattern [" & strPattern & "] in content of source file [" & strPath2Client & "]." WScript.Quit 2 End If End With Else WScript.StdOut.WriteLine "Can't find source file [" & strPath2Client & "]." WScript.Quit 1 End If End With WScript.Quit 0 '============================================================================= '============================================================================= Function ConvertByteArray2HexString(arrByteArray) Dim i Dim strValue strValue = "" For i = 1 To LenB(arrByteArray) strValue = strValue & Right("00" & Hex(AscB(MidB(arrByteArray, i, 1))), 2) Next ConvertByteArray2HexString = strValue End Function '============================================================================= '============================================================================= Function ConvertString2ByteArray(strValue) With WScript.CreateObject("ADODB.Stream") .Type = adTypeText .CharSet = "windows-1251" .Open .WriteText strValue .Position = 0 .Type = adTypeBinary ConvertString2ByteArray = .Read() .Close End With End Function '============================================================================= Придётся набраться терпения: перевод массива байт, c которыми VBScript напрямую работать не может, в строку — процесс весьма не быстрый (у меня занимает десять-пятнадцать секунд, ужас). Пробуйте. |
Отправлено: 08:44, 15-08-2018 | #17 |
Новый участник Сообщения: 13
|
Профиль | Отправить PM | Цитировать Iska, Мне не хватает ума запустить этот код. я правильно понимаю, мне нужно создать файл с расширением .WSH? или мне нужно просто выполнить данный код через консоль?
Разобрался. у меня порядка минуты уходит что бы выполнился этот код. очень долго. |
Отправлено: 09:06, 15-08-2018 | #18 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Hraniti:
Цитата Hraniti:
|
||
Отправлено: 09:23, 15-08-2018 | #19 |
Новый участник Сообщения: 13
|
Профиль | Отправить PM | Цитировать Iska, Понятно. Спасибо вам большое что помогли найти выход из ситуации. не буду писать хоть и такой долгий.. по времени быстрей самому открыть найти и заменить в ручную. думал об более быстром варианте. Ну в любом случае это работает.
|
Отправлено: 09:27, 15-08-2018 | #20 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
VBS/WSH/JS - Замена текста с помощью VBScript. | Sally88 | Скриптовые языки администрирования Windows | 19 | 14-05-2018 16:02 | |
VBS/WSH/JS - [решено] Замена символов в перменных VBScript | ymo_4@vk | Скриптовые языки администрирования Windows | 8 | 05-12-2017 18:17 | |
VBS/WSH/JS - [решено] Как изменить конкретную строку в текстовом файле с помощью Vbscript | neo21 | Скриптовые языки администрирования Windows | 8 | 30-10-2011 15:47 | |
[решено] остановка функции при условии. | yukuru | AutoIt | 3 | 26-07-2011 00:01 | |
VBS/WSH/JS - [решено] Как создать файл в кодировке UTF-8 с помощью VBScript? | Zeron | Скриптовые языки администрирования Windows | 2 | 30-05-2011 03:50 |
|