Страница 1 из 3

Распаковка mime, uue, b64

Добавлено: Ср окт 13, 2010 16:55
Lev
В последнее время на страницах форума всё чаще выкладываются файлы в mime и т.п. кодировке. Мне чуть надоело их копировать-сохранять-распаковывать, и я решил предоставить это дело ТС. Теперь всё что требуется - скопировать текстовку со страницы, выбрать желаемую директорию и нажать кнопку скрипта.

Код: Выделить всё

' File: Unpack_b64.vbs 
' Description: Распаковывает mime, uue, b64 текст
' скопированный в буфер обмена в текущую папку
' Requirements: WSH Helper for TC by Volniy 
' Copyright: (c) 2010, lev

Set TCS = CreateObject("TCSCRIPT.Helper") 
Set FSO = CreateObject("Scripting.FileSystemObject")
Const ForReading = 1, ForWriting = 2

TCS.Wait=True
TempFile=TCS.GetSrcPath & "\temp.b64"

Set F = fso.CreateTextFile(TempFile, True)
  F.Write TCS.GetTextFromClip
F.Close

'к сожалению у меня не заработало выделение файла
'по команде cm_LoadSelectionFromClip,
'но желающие могут поэкпериментировать
'TCS.SetTextToClip(TempFile)
'TCS.Pause = 1000
'TCS.SendCommand  "cm_LoadSelectionFromClip",True
'TCS.Pause = 1000

'костыль - выделение файла через коммандную строку
TCS.SendKeystroke ("cd " & TempFile)
TCS.SendKeystroke "{Enter}"

TCS.SendCommand ("cm_Decode") 
TCS.SendKeystroke "{BKSP}"
TCS.SendKeystroke "{Enter}"

Set F = fso.GetFile(TempFile)
F.Delete

Set TCS = Nothing 
Set FSO = Nothing 
WScript.Quit

Добавлено: Ср окт 13, 2010 17:07
Avada
Lev
О, это ценно! Остаётся порекомендовать выкладывающим файлы в MIME хотя бы иногда давать ссылку на этот пост.

Добавлено: Ср окт 13, 2010 19:10
Lev
Извиняюсь, как обычно, позабыл о существовании кириллических путей, и кириллических раскладок клавиатуры. Попытаюсь поправить позже.

:!:

Добавлено: Ср окт 13, 2010 19:25
Tol!k
Для работы этого варианта нужно, чтобы ТС умел _распаковывать_ .uue
например, с помощью MhtUnPack.wcx

Код: Выделить всё

' Description: Распаковывает mime, uue, b64 текст
' из буфера обмена в текущую папку
' Requirements: WSH Helper for TC by Volniy
' Based on lev's code (c) 2010

Set TCS = CreateObject("TCSCRIPT.Helper")
Set FSO = CreateObject("Scripting.FileSystemObject")
Const ForReading = 1, ForWriting = 2
TCS.Wait = True

TempFile=TCS.GetSrcPath & "\TextFromClip.tmp.uue"
Set F = fso.CreateTextFile(TempFile, True)
  F.Write TCS.GetTextFromClip
F.Close

TCS.SendCommand "cm_RereadSource"
TCS.SetTextToClip(TempFile)
TCS.SendCommand "cm_LoadSelectionFromClip", True

TCS.SendCommand "cm_UnpackFiles"
TCS.SendKeystroke "{BS}{Enter}"

Set F = fso.GetFile(TempFile)
F.Delete
TCS.SendCommand "cm_RereadSource"

Set TCS = Nothing
Set FSO = Nothing
WScript.Quit
Работает с кириллицей

Добавлено: Ср окт 13, 2010 20:32
Andrey_A
Идея очень интересная и актуальная, но ни один из предложенных скриптов не хотел срабатывать, пришлось методом тыка искать что не так, в итоге с этим куском заработало, может кому пригодится:
кусок между строками F.Close и Set F = fso.GetFile(TempFile)

Код: Выделить всё

TCS.Pause = 300
TCS.SendCommand ("cm_RereadSource") 
TCS.SetTextToClip(TempFile) 
TCS.SendCommand "cm_LoadSelectionFromClip", True 
TCS.SendKeystroke "{Down}"
TCS.SendCommand "cm_UnpackFiles" 
TCS.Pause = 120
TCS.SendKeystroke "{BS}" 
TCS.Pause = 120
TCS.SendKeystroke "{Enter}"
строка TCS.SendKeystroke "{Down}" позволяет распаковывать в пустой папке

Добавлено: Вс окт 17, 2010 15:36
Volniy
Вариант первого в теме скрипта с использованием метода SetSrcPath
Для этого варианта понадобится Script Helper Beta12

Код: Выделить всё

Set TCS = CreateObject("TCSCRIPT.Helper")
Set FSO = CreateObject("Scripting.FileSystemObject")

TempFile=TCS.GetSrcPath & "\temp.b64" 

Set F = fso.CreateTextFile(TempFile, True)
  F.Write TCS.GetTextFromClip
F.Close

'SetSrcPath (SrcPath, [InNewTab])  -  дает указание установить
'желаемый путь в панели-источнике TC. Если указать в качестве первого
'параметра путь к файлу, то кроме перехода к папке, где расположен
'данный файл, будет дополнительно произвелено выделение файла(!) в
'панели-источнике. Если необязательный параметр InNewTab установить
'в True, тогда указываемый путь будет открыт в новой вкладке.

TCS.SetSrcPath TempFile
TCS.SendCommand ("cm_Decode"), False
TCS.SendKeystroke "{BKSP}"
TCS.SendKeystroke "{Enter}"

TCS.Sleep 500
fso.DeleteFile TempFile

Set TCS = Nothing 
Set FSO = Nothing 
WScript.Quit

Добавлено: Вс окт 17, 2010 17:30
Rodny
Volniy
Выдаётся сообщение "Функция не поддерживается."
При этом в текущей папке кратковременно появляется папка "temp.b64" и в ней файл с именем зашифрованного.
Затем папка удаляется.
Пример b64, с любым другим так же.

Script Helper Beta12, раз-/регистрировал.

Добавлено: Вс окт 17, 2010 17:41
Flasher
Rodny
А у меня сработало. Тот же Хелпер.

Volniy
А ридмишный коммент по SetTrgPath там для чего фигурирует?

Добавлено: Вс окт 17, 2010 17:44
Tol!k
Rodny, у тебя установлен MhtUnPack.wcx (в .b64 можно войти) ?
Volniy писал(а):Если указать в качестве первого параметра путь к файлу, то кроме перехода к той папке, где расположен данный файл, будет дополнительно произвелено выделение файла(!) в целевой панели.
Если файл является "архивом" в понимании ТС, то происходит вход а архив и, конечно, ничего не выделяется

Добавлено: Вс окт 17, 2010 17:52
Flasher
Tol!k
Я ведь не зря спросил про SetTrgPath. В скрипте-то он не используется. Поэтому тут не важно, входит как в архив или нет.

Добавлено: Вс окт 17, 2010 17:56
Tol!k
Используется TCS.SetSrcPath, логика работы у них одинаковая.
SetSrcPath (SrcPath, [InNewTab]) - дает указание установить же-
лаемый путь в панели-источнике TC. Если указать в качестве первого
параметра путь к файлу, то кроме перехода к папке, где расположен
данный файл, будет дополнительно произвелено выделение файла(!) в
панели-источнике. Если необязательный параметр InNewTab установить
в True, тогда указываемый путь будет открыт в новой вкладке.
Вместо выделения, ТС входит в архив. Поэтому скрипт и не работает.
Нужно добавить строку

Код: Выделить всё

TCS.SetSrcPath TempFile

'для выхода из "архива"
TCS.SendKeystroke "{BS}"

TCS.SendCommand ("cm_Decode"), False

Добавлено: Вс окт 17, 2010 18:09
Flasher
Ну да, логика одна, разница только в панелях. Просто увидел в твоём скрипте он также используется, поэтому странно стало. Ну а проблема решается прописью в wincmd.ini
b64=x+256,%COMMANDER_PATH%\Plugins\wcx\MhtUnPack\MhtUnPack.wcx
или поменять в скрипте
TempFile=TCS.GetSrcPath & "\temp.b64"
на
TempFile=TCS.GetSrcPath & "\temp.uue"

Добавлено: Вс окт 17, 2010 18:20
Tol!k
Правильное волшебное число прописано, по Enter`y входа нет.
Изображение
Но скрипт не работает – происходит входит в архив

Добавлено: Вс окт 17, 2010 18:27
Flasher
Хм, кстати, я этот касяк замечаю ещё у ряда архивных плагинов, в связанные файлы которых очень бы не хотелось входить по Enter. Ну что ж, тогда вариант с переименованием расширения, которое, разумеется, не прописано в ini.

Добавлено: Вс окт 17, 2010 18:32
Rodny
Tol!k
Да, MhtUnPack есть, "TCS.SendKeystroke "{BS}"" помогла. Спасибо.

Кстати, все варианты через MhtUnPack у меня работать отказываются. Говорят:

Код: Выделить всё

---------------------------
TextFromClip.tmp.uue
---------------------------
Ошибка чтения диска.
---------------------------
ОК   Отмена   
---------------------------