Недавно я получил некоторую помощь со скриптом замены текста и подумал, можно ли его использовать для исправления. Я обычно использую HxD и думал, что если это по сути прославленный блокнот, то какая разница между редактированием исполняемого файла в текстовом и шестнадцатеричном редакторе? Я решил проверить свою теорию и протестировать скрипт, который может заменить указанные строки и добавить информацию в исполняемый файл.
Что меня здесь отталкивает, так это то, что если он используется для замены текста в текстовом документе, он заменяет только строки и не добавляет байты в документ, если только новая строка не длиннее предыдущей. Я считаю, что это потому, что скрипт предназначен для редактирования текстовых документов и изменяет заголовок из-за этого. Я использовал HxD для сравнения до и после и, конечно же, заголовок был изменен. Вот сценарий, который я сейчас имею:
@echo off
setlocal enableextensions disabledelayedexpansion
set search=OutDir=Old String
set replace=OutDir=New String
set textFile=Document.txt
:PowerShell
SET PSScript=%temp%\~tmpStrRplc.ps1
ECHO (Get-Content "%~dp0%textFile%").replace("%search%", "%replace%") ^| Set-Content "%~dp0%textFile%">"%PSScript%"
SET PowerShellDir=C:\Windows\System32\WindowsPowerShell\v1.0
CD /D "%PowerShellDir%"
Powershell -ExecutionPolicy Bypass -Command "& '%PSScript%'"
EXIT
(Строки, которые я буду заменять, имеют одинаковый размер, поэтому размер исполняемого файла не изменится, и повреждение строк не будет использоваться.)
Я хотел бы отметить, что я новичок в PowerShell, поэтому я все еще изучаю, как он работает. Я заметил переменную %~dp0%textFile%
. Если я правильно интерпретирую эту переменную, она говорит скрипту PowerShell обработать определенный файл, который нужно изменить, как текстовый документ. Если следовать этой логике (если она верна), существует ли подобная переменная, которая либо игнорирует формат, либо обрабатывает входной файл как исполняемый файл? Мой сценарий способен изменить то, что я определяю, но нарушает исполняемый файл. Возможно ли исправление с помощью моего сценария?