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

Обсуждение вопросов автоматизации Total Commander с помощью сторонних программ и скриптовых технологий.

Модераторы: Моторокер, Avada, CaptainFlint, Nik, d-view

Аватара пользователя
Lev
Сообщения: 392
Зарегистрирован: Ср мар 02, 2005 16:34

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

Сообщение 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
Аватара пользователя
Avada
Сообщения: 10544
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

Lev
О, это ценно! Остаётся порекомендовать выкладывающим файлы в MIME хотя бы иногда давать ссылку на этот пост.
Даже самая богатая фантазия
Не представит себе наши безобразия.
Аватара пользователя
Lev
Сообщения: 392
Зарегистрирован: Ср мар 02, 2005 16:34

Сообщение Lev »

Извиняюсь, как обычно, позабыл о существовании кириллических путей, и кириллических раскладок клавиатуры. Попытаюсь поправить позже.
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

:!:

Сообщение 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
Работает с кириллицей
Последний раз редактировалось Tol!k Ср окт 13, 2010 21:26, всего редактировалось 1 раз.
Аватара пользователя
Andrey_A
Сообщения: 394
Зарегистрирован: Пт апр 10, 2009 06:28
Откуда: Сочи
Контактная информация:

Сообщение 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}" позволяет распаковывать в пустой папке
Аватара пользователя
Volniy
Сообщения: 585
Зарегистрирован: Ср дек 15, 2004 00:17
Откуда: Местный

Сообщение 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
Последний раз редактировалось Volniy Пн окт 18, 2010 00:17, всего редактировалось 1 раз.
Аватара пользователя
Rodny
Сообщения: 949
Зарегистрирован: Ср янв 24, 2007 00:59
Откуда: Могилёв, Беларусь

Сообщение Rodny »

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

Script Helper Beta12, раз-/регистрировал.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Rodny
А у меня сработало. Тот же Хелпер.

Volniy
А ридмишный коммент по SetTrgPath там для чего фигурирует?
Последний раз редактировалось Flasher Вс окт 17, 2010 17:44, всего редактировалось 1 раз.
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

Сообщение Tol!k »

Rodny, у тебя установлен MhtUnPack.wcx (в .b64 можно войти) ?
Volniy писал(а):Если указать в качестве первого параметра путь к файлу, то кроме перехода к той папке, где расположен данный файл, будет дополнительно произвелено выделение файла(!) в целевой панели.
Если файл является "архивом" в понимании ТС, то происходит вход а архив и, конечно, ничего не выделяется
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Tol!k
Я ведь не зря спросил про SetTrgPath. В скрипте-то он не используется. Поэтому тут не важно, входит как в архив или нет.
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

Сообщение Tol!k »

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

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

TCS.SetSrcPath TempFile

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

TCS.SendCommand ("cm_Decode"), False
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Ну да, логика одна, разница только в панелях. Просто увидел в твоём скрипте он также используется, поэтому странно стало. Ну а проблема решается прописью в wincmd.ini
b64=x+256,%COMMANDER_PATH%\Plugins\wcx\MhtUnPack\MhtUnPack.wcx
или поменять в скрипте
TempFile=TCS.GetSrcPath & "\temp.b64"
на
TempFile=TCS.GetSrcPath & "\temp.uue"
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

Сообщение Tol!k »

Правильное волшебное число прописано, по Enter`y входа нет.
Изображение
Но скрипт не работает – происходит входит в архив
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Хм, кстати, я этот касяк замечаю ещё у ряда архивных плагинов, в связанные файлы которых очень бы не хотелось входить по Enter. Ну что ж, тогда вариант с переименованием расширения, которое, разумеется, не прописано в ini.
Аватара пользователя
Rodny
Сообщения: 949
Зарегистрирован: Ср янв 24, 2007 00:59
Откуда: Могилёв, Беларусь

Сообщение Rodny »

Tol!k
Да, MhtUnPack есть, "TCS.SendKeystroke "{BS}"" помогла. Спасибо.

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

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

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