Показать полную графическую версию : [решено] вывод данных с конца файла
Помогите, пожалуйста, со скриптом на VBS, который бы выводил последние два байта файла в текстовом виде.
Dim fso, objFile
Set fso = CreateObject("Scripting.FileSystemObject")
Set objFile = fso.OpenTextFile(filename)
objFile.Skip(0)
If not objFile.AtEndOfStream Then
content_str = bjFile.Read(2)
content=Replace(content_str,Chr(0)," ")
End If
objFile.Close
Этот скрипт выводит два байта с начала, а вот как сделать это для конца файла - ума не приложу!
На PowerShell:
Get-Content C:\file.txt -Encoding Byte | Select-Object -Last 2
Благодарю, но к сожалению не подошло. :(
Объясню более детально для чего необходимо...
Скрипт нужен для подключения к плагину Тотала: http://wincmd.ru/plugring/script_wdx.html
Поскольку иных плагинов позволяющих читать файл в HEX виде и выводить в колонку Тотала (нужна сортировка по значению) Гугл не знает, приходится заниматься хирургией гланд через место в которое не светит солнце!
pzh2393, вот Вам скрипт, «прикручивайте» сами:
Option Explicit
Dim strFileName
Dim intByteCount
Dim objFSO
Dim objSpeechFileStream
Dim lngLength
Dim arrBuff
strFileName = "C:\WINDOWS\notepad.exe"
intByteCount = 2
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objSpeechFileStream = WScript.CreateObject("SAPI.SpFileStream")
If objFSO.FileExists(strFileName) Then
lngLength = objFSO.GetFile(strFileName).Size
With objSpeechFileStream
.Open strFileName
On Error Resume Next
.Seek lngLength - intByteCount
If Err.Number = 0 Then
On Error Goto 0
If .Read(arrBuff, intByteCount) = intByteCount Then
WScript.Echo ConvertByteArray2HexString(arrBuff)
End If
Else
On Error Goto 0
End If
.Close
End With
Else
' Nothing to output
End If
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
'=============================================================================
Большое спасибо!
Правда скрипт выдает ошибку "Expected statement"... не подскажете что это, в каком месте пытаться поправить?
В окне сообщения об ошибке нажмите Ctrl-C, затем вставьте полученный текст из буфера обмена сюда. Если как-то меняли код — приведите и его.
В коде ничего не менял...
При запуске из под "окон" возвращает значение "4444", что оно значит тоже непонятно, в колонке Тотала дважды пишет - "Expected statement Expected statement" для любых типов файлов.
При запуске из под "окон" возвращает значение "4444", что оно значит тоже непонятно, »
Правильно, это и есть два последних байта файла «c:\windows\notepad.exe» в шестнадцатеричном представлении.
в колонке Тотала дважды пишет - "Expected statement Expected statement" для любых типов файлов. »
Я привёл образец кода для:
который бы выводил последние два байта файла в текстовом виде. »
Прикручивать его к TC я не планировал и не обещал. Смотрите документацию к плагину и готовые примеры.
pzh2393, как сделаете — можете сюда же выложить проделанные Вами действия по подключению.
2Iska
В теме посвященной вопросам работы плагина помогли адаптировать Ваш скрипт...
With CreateObject("SAPI.SpFileStream")
.Open FileName
.Seek CreateObject("Scripting.FileSystemObject").GetFile(FileName).Size - 2
If .Read(F, 2) = 2 Then
For i = 1 To LenB(F)
Content = Content & " " & Right("00" & Hex(AscB(MidB(F, i, 1))), 2)
Next
End If
.Close
End With
"Content = " отвечает за вывод значения в колонку Тотала, а "FileName" - для всех файлов.
Подключение к Total Commander:
script.wdx подключается либо обычным способом через "Конфигурация => Настройки => Плагины => WDX.Настройка => Добавить"
либо ручным прописыванием в wincmd.ini строчек
[ContentPlugins]
0=%COMMANDER_PATH%\PLUGINS\wdx\script\script.wdx
script.ini плагина должен выглядеть примерно так:
[Script]
Section=NAME
[NAME]
Script=name.vbs
LongName=1
ParseDirs=0
В самом Тотале создается новый набор колонок "Конфигурация => Настройки => Набор колонок => Новый"
где в любую колонку вписывается [=script.Result], [=script.Result1], [=script.Result2] и тд. в зависимости сколько значений возвращает скрипт ("Content = ", "Content1 = ", "Content2 = " и тд.).
Проверил данный код в Тотал - работает!
Пы.Сы. Ещё раз благодарю, без Вашего кода никто не брался за такую задачу.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.