Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Сценарий на VBScript

♡$ⴎG@r₱u₷sყ♡ Высший разум (316218), на голосовании 11 месяцев назад
Напишите мне VBS скрипт, который изменит последний байт указанного мной файла на случайное ненулевое значение (от 01 до FF).

Также желательна оптимизированная реализация скрипта для больших файлов (чтобы скрипт мог обрабатывать файлы весом несколько мегабайт и при этом при выполнении не тратить на это много времени и не занимать много места в RAM).

Ответы от чатагпт не интересуют, он все равно не справится с этим, так что ответы с ним или просто с изначально нерабочим кодом буду скрывать)0

Нормальный и человеческий ответ с рабочим кодом, который будет выполнять нужную мне основную логику, выберу лучшим.
Дополнен 1 год назад
Модер удали мой вопрос
Чуваки накидайте репортов
Голосование за лучший ответ
a1987zz Мудрец (13905) 1 год назад
VBScript с winapi не работает, нужна внешняя библиотека типо DynamicWrapperX там и можно писать патч программы.
♡$ⴎG@r₱u₷sყ♡Высший разум (316218) 1 год назад
Так а причем здесь WinAPI? Это спокойно без WinAPI сделать можно.
a1987zz Мудрец (13905) В VBScript без winapi? И как?
Артём Карпов Знаток (275) 11 месяцев назад
Randomize
Const ForReading = 1
Const ForWriting = 2

Dim objFS, objFile, fileSize, randomByte

Set objFS = CreateObject("Scripting.FileSystemObject")
Set objFile = objFS.OpenTextFile("путь_к_вашему_файлу", ForReading, False)
fileSize = objFile.Size
objFile.Close

Set objFile = objFS.OpenTextFile("путь_к_вашему_файлу", ForWriting, True)

If fileSize > 0 Then
Randomize
randomByte = Chr(Int((254 * Rnd) + 1)) ' Генерация случайного значения для последнего байта (от 01 до FE)
objFile.Write objFile.ReadAll ' Записываем все, кроме последнего байта
objFile.Write randomByte ' Записываем случайное значение для последнего байта
End If

objFile.Close
Set objFS = Nothing
Set objFile = Nothing


Прежде чем запускать скрипт, замените "путь_к_вашему_файлу" на путь к вашему файлу.
♡$ⴎG@r₱u₷sყ♡Высший разум (316218) 11 месяцев назад
Я просил без ChatGPT

И как следовало ожидать, не работает скрипт вообще.
Строка: 9
Символ: 1
Ошибка: Объект не поддерживает это свойство или метод: 'Size'
Код: 800A01B6
Артём КарповЗнаток (275) 11 месяцев назад
Randomize
Const ForReading = 1
Const ForWriting = 2

Dim objFS, objFile, file, fileSize, randomByte

Set objFS = CreateObject("Scripting.FileSystemObject")
Set file = objFS.GetFile("путь_к_вашему_файлу")
fileSize = file.Size

Set objFile = objFS.OpenTextFile(file.Path, ForReading, False)
objFile.Close

Set objFile = objFS.OpenTextFile(file.Path, ForWriting, True)

If fileSize > 0 Then
Randomize
randomByte = Chr(Int((254 * Rnd) + 1)) ' Генерация случайного значения для последнего байта (от 01 до FE)
objFile.Write objFile.ReadAll ' Записываем все, кроме последнего байта
objFile.Write randomByte ' Записываем случайное значение для последнего байта
End If

objFile.Close
Set objFS = Nothing
Set objFile = Nothing
Артём Карпов Знаток (275) Артём Карпов, Убедитесь, что вы заменили "путь_к_вашему_файлу" на фактический путь к файлу, с которым вы работаете. Этот исправленный скрипт должен работать без ошибки, указанной вами. Если у вас возникнут дополнительные вопросы или проблемы, не стесняйтесь обращаться за помощью.
Юнирчик Ученик (192) 3 недели назад
FilePath = "C:\path\to\your\file.bin"
Function GetRandomNonZeroByte()
GetRandomNonZeroByte = Int((255 * Rnd) + 1)
End Function
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(FilePath, 2, False, -1) ' 2 = ForWriting, -1 = TristateUseDefault
FileSize = objFSO.GetFile(FilePath).Size
strFileContent = objFile.Read(FileSize)
objFile.Close
RandomByte = Chr(GetRandomNonZeroByte())
If FileSize > 0 Then
Mid(strFileContent, FileSize, 1) = RandomByte
Else
WScript.Echo
WScript.Quit
End If
Set objFile = objFSO.OpenTextFile(FilePath, 2, False, -1)
objFile.Write strFileContent
objFile.Close

WScript.Echo
Set objFile = Nothing
Set objFSO = Nothing
на Python
Егор Ковалёв Ученик (149) 5 дней назад
Const adTypeBinary = 1
Const adModeReadWrite = 3

Dim filePath, newByte

' Получаем путь к файлу от пользователя
filePath = InputBox("Введите полный путь к файлу:", "Выбор файла")

If filePath = "" Then
MsgBox "Операция отменена пользователем"
WScript.Quit
End If

' Создаем объект для работы с файлом
Set objStream = CreateObject(" ADODB.Stream ")
objStream.Type = adTypeBinary
objStream.Open

' Открываем файл в режиме чтения/записи
objStream.LoadFromFile filePath
objStream.Position = objStream.Size - 1

' Генерируем случайное значение от 1 до 255
Randomize
newByte = CByte(Int(Rnd * 255) + 1)

' Записываем новый байт
objStream.Write newByte
objStream.Flush
objStream.Close

MsgBox "Последний байт успешно изменен на " & Hex(newByte)
Похожие вопросы