скрипт для кодирования(декодирования) нескольких файлов b64

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

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

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

Сообщение Flasher »

shveicar писал(а):авто переименование будет лишним, какой в нем смысл?
Допустим файлы b64 скопированы в папку, где лежат файлы с закодированными именами, но с другим содержимым, при декодировании они перепишутся, что не всегда желательно. Или нужно из имеющихся файлов создать новые b64 после модификации, при этом в этой папке лежат старые b64. В этом случае может понадобится иметь несколько модифицированных MIME-вариантов.
shveicar писал(а):а то, уже начал думать что AutoHotkey будет по мощнее чем vbs
Есть кое-что помощнее, но точно не AutoHotKey. Тут у каждого свои плюсы и минусы. Но то, что AHK куда легче в усвоении - факт.
Serge Yolkin писал(а):Например: по ПКМ на файле выбираем "Энкодить", и результат - в буфере обмена.
ПКМ в TC не поставишь, а биндить на резидент желания нет (задача не частая). [s]Кодировать в буфер ещё проще. Думаю, добавлю параметр.[/s] Хотя нет, мы же списки обрабатываем (как верно далее замечено), это тоже не подходит. Посмотри название темы.
Serge Yolkin писал(а):Или так: сначала - в 7z, а уж потом энкодить. Для форума.
Раньше была и такая мысль. Странно, что забыл совсем. Это, пожалуй, для нескольких файлов сделать можно. Позже оформлю дополнительный вариант.
Последний раз редактировалось Flasher Пн мар 19, 2012 01:30, всего редактировалось 3 раза.
Аватара пользователя
shveicar
Сообщения: 277
Зарегистрирован: Пн апр 18, 2011 01:54
Откуда: Россия Москва

Сообщение shveicar »

Serge Yolkin писал(а):Например: по ПКМ на файле выбираем "Энкодить", и результат - в буфере обмена
Так скрипт, специально создавался для нескольких файлов. Что же будет если их сумму - загнать в буфер. :D
Flasher писал(а):Допустим файлы b64 скопированы в папку, где лежат файлы с закодированными именами, но с другим содержимым
Ну если, человек профессиональный перекодировщик, то что-бы не запутаться - согласен такое необходимо...
Последний раз редактировалось shveicar Пн мар 19, 2012 01:49, всего редактировалось 1 раз.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

shveicar писал(а):скрипт, специально создавался для нескольких файлов
Кстати, очень верное замечание. Как я сразу не сообразил. :)
shveicar писал(а):Ну если, человек профессиональный перекодировщик, то что-бы не запутаться ...
Честно, не уловил мысль насчёт кодировщика. И дело разве в "запутаться"? Я пишу про необходимость наличия разных (де)кодированных модификаций файлов в одной папке.
Аватара пользователя
shveicar
Сообщения: 277
Зарегистрирован: Пн апр 18, 2011 01:54
Откуда: Россия Москва

Сообщение shveicar »

Честно, не уловил мысль насчёт кодировщика
Поясняю: Если Чел не "профи", создает папку,- кидает туда информацию (имена естественно разные) выполняет скрипт, - получает, допустим в той-же, в папке результат... Обратная процедура выглядит так-же: в чистую папку кидаем файлы в B64 -применяем скрипт,- и там-же забираем результат, В случае с Профи, - при сохранении результатов в существующие папки с файлами, (все зависит от параметров в скрипте и наличии "обработанных" файлов) - могут быть косяки...
Впрочем, Вам как Автору, - видней:wink:.
Лично Я, не против - дополнительных опций...
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

shveicar
Т.е. есть уверенность, что у "не профи" точно не появится желание скидывать всё в одну папку? У меня такой уверенности нет.
Но вот вопрос - если таки файлы уже есть, переписывать их есть смысл или всё же стоит добавлять новые? Т.е. тут сразу надо переименовывать или только с выставлением опции?
Паковать в 7-zip тоже опционально, или отдельный скрипт - лучше?
Аватара пользователя
shveicar
Сообщения: 277
Зарегистрирован: Пн апр 18, 2011 01:54
Откуда: Россия Москва

Сообщение shveicar »

Flasher
Если возможно:
Когда, такие файлы уже есть - лучше добавлять новые. Для 7zip (ради удобства) - лучше создать отдельный скрипт.
Спасибо за Труды.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

shveicar
Ренэйм сделал. Скрипт с 7z - завтра.
Serge Yolkin
Сообщения: 664
Зарегистрирован: Сб июл 25, 2009 11:12

Сообщение Serge Yolkin »

Flasher писал(а):ПКМ в TC не поставишь
Через внутренние ассоциации - легко.

А на счет темы - да, оффтоплю. Результаты ковыряний в скрипте сообщу где-нибудь в другой ветке. Если только автор не возражает.
Аватара пользователя
shveicar
Сообщения: 277
Зарегистрирован: Пн апр 18, 2011 01:54
Откуда: Россия Москва

Сообщение shveicar »

Flasher писал(а):Ренэйм сделал
Порядок, Все работает. ОК...
Serge Yolkin писал(а):Если только автор не возражает
Не возражаю, мне будет тоже интересно, тем более что на js
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Serge Yolkin писал(а):Через внутренние ассоциации - легко.
Я сейчас перечитал как ты написал: выбираем "Энкодить". Ты про меню. А я было подумал, что ты про выполнение по нажатию ПКМ. Тогда это вообще бессмыслица, в то время когда есть Enter и даблклик ЛКМ. Контекстное меню-то тут при чём? И как это относилось к модификации кода? Да и через вн. ассоциации несколько файлов при использовании цикла не подхватишь, только многократным выполнением скрипта без оного (такая реализация мне не по душе).
Serge Yolkin писал(а):Если только автор не возражает.
Автор чего - топика или скрипта? :)
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

shveicar писал(а):Для 7zip (ради удобства) - лучше создать отдельный скрипт.
Не захотелось что-то включать утилиту. Пакую в zip-ы. Разница в результате несущественная. Иногда и zip выигрывает по ёмкости b64. Да и формат есть по умолчанию в Тотале и на всех современных системах в отличии от 7zip.
Скрипт тот же с новым ключом. Ничего неудобного в этом не вижу.
Аватара пользователя
shveicar
Сообщения: 277
Зарегистрирован: Пн апр 18, 2011 01:54
Откуда: Россия Москва

Сообщение shveicar »

Flasher
В таком виде, - весьма удобно, главное что правильно определяет типы файлов... (про отдельный скрипт говорил, - из за возможных ошибок с определением)
Проверил - все- Ок.. Спасибо.
P.s Вот и не коммерческая версия (платного аналога) получилась :wink: ...
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

shveicar
Это скрипт, а не просто компонент. Поэтому аналогии тут нет. Ну, а этот платный компонент, возможно, ужимает получше MSXml2 и задействует более расширенный анализ кода. Хотя я его ещё толком не тестировал. Бесплатные внешние компоненты подключить могу (если они лучше ужимают, конечно).
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Tol!k писал(а):проблемы с именами на кириллице
Попробуй с такой утилитой.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Тут был запрос.

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

'================================================================
' 1) Получение в текущей папке файла из кодированного текста
' буфера обмена вида B64/MIME/UUE/XXE/BinHex
' 2) Если в буфере нет соотв. кода,
'    то кодировать/декодировать выбранные файлы в панели

' Условие: путь запуска - пустой

' Параметры: %WL <расширение кодировки> <флаг упаковки в zip: 1>

' Возможные расширения кодирования: b64, xxe, uue

' Автор - Flasher ©
'======================= Путь к UUDeView ========================
UUDev = """%COMMANDER_PATH%\Utils\uudeview\uudeview.exe"""
'======================= Путь к UUEnView ========================
UUEnv = """%COMMANDER_PATH%\Utils\uudeview\uuenview.exe"""
'======================== Путь к TCFS2 ==========================
TCFS2 = """%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe"""
'================================================================
L = vbNewLine
Set SHA = CreateObject("Shell.Application")
Dim WSH : Set WSH = CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")
P = "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3\1407"
A = WSH.RegRead(P) : If A > 0 Then WSH.RegWrite P, 0, "REG_DWORD"
Clip = Trim(CreateObject("htmlfile").ParentWindow.ClipboardData.GetData("text"))
Temp = SHA.NameSpace(WSH.ExpandEnvironmentStrings("%TEMP%")).Self.Path
If Clip <> "" Then
  Clip = Replace(Replace(Clip, " " & L, L), L & " ", L) : Search = InStr(Clip, "begin ")
  If (Search And IsNumeric(Mid(Clip, Search + 8, 2))) Or InStr(Clip, L & "Content-Transfer-Encoding:") Then
    File = Temp & "\" & FSO.GetTempName
    Set F = FSO.OpenTextFile(File, 2, True) : F.Write Trim(Clip) : Set SHA = Nothing : F.Close
    WSH.Run UUDev & " -i -m +o -c """ & File & """", 0, True : WSH.Exec(TCFS2 & " /ef tcm(540)")
    With CreateObject("InternetExplorer.Application")
      .Navigate("about:blank") : .document.parentWindow.clipboardData.setData "text", ""
      .ExecWB 45, 2 : .Quit
    End With : If A > 0 Then WSH.RegWrite P, A, "REG_DWORD"
    Quit
  End If
End If
With WScript.Arguments
  C = .Count : If C = 0 Then Quit
  List = .Item(0) : If C > 1 Then Ext = .Item(1) Else Ext = " "
End With
Do Until Ext = "b64" Or Ext = "xxe" Or Ext = "uue"
  Ext = InputBox(L & "Введите одно из расширений формата возможного кодирования:" & L & _
  "b64, uue, xxe","Кодирование") : If Trim(Ext) = "" Then Quit
Loop : E = "7z|7zip|zip|rar|arc|cab|nz|pea|bz|bzip|bz2|bzip2|arj|tar|gz|gza|gzi|pzip|tgz|ace|uc2"
Select Case Ext
  Case "b64" : Code = " -b " : Case "uue" : Code = " -u " : Case "xxe" : Code = " -x "
End Select
For Each F in Split(FSO.GetFile(List).OpenAsTextStream(1, -1).ReadAll, L)
  If FSO.FileExists(F) Then
    Set File = FSO.GetFile(F).OpenAsTextStream(1, -2) : RF = File.ReadAll
    If InStr(RF, L & "begin ") Or InStr(RF, L & "Content-Transfer-Encoding:") Or _
    InStr(RF, L & "_=_ Part ") Then
      WSH.Run UUDev & " -i -m +o """ & F & """", 0, True
    Else
      If C = 3 Then
        If InStr(E, LCase(FSO.GetExtensionName(F))) = 0 Then
          NF = Temp & "\" & FSO.GetBaseName(F) & ".zip" : Set ZIP = FSO.CreateTextFile(NF)
          ZIP.Close : Set ZIP = Nothing
          Set ArchDir = SHA.NameSpace(NF) : ArchDir.CopyHere F, 20
          Size = 0 : Set AF = ArchDir.ParseName(FSO.GetFileName(F))
          On Error Resume Next : Err.Number = 424
          Do While Err.Number = 424 And Size <> FSO.GetFile(F).Size : Err.Number = 0
            Set AF = ArchDir.ParseName(FSO.GetFileName(F)) : Size = AF.Size
          Loop : On Error Goto 0
          WScript.Sleep 10 : Set AF = Nothing : Set ArchDir = Nothing : F = NF
        End If
      End If : WSH.Run UUEnv & Code & "-o """ & F & """", 0, True
      N = FSO.GetFileName(F) : BN = FSO.GetBaseName(F) : NF = BN & "." & Ext
      If Not FSO.FileExists(NF) Then FSO.GetFile(BN & ".001").Name = NF
      If Ext = "b64" Then
        FN = WSH.CurrentDirectory & "\" & NF : Set CF = FSO.OpenTextFile(FN) : CF.SkipLine
        If CF.ReadLine = "_=_ " Then
          Base = CF.ReadAll : CF.Close : Set CF = Nothing : Set CF = FSO.OpenTextFile(FN, 2)
          CF.Write "MIME-Version: 1.0" & L & _
          "Content-Type: application/octet-stream; name=""" & N & """" & L & _
          "Content-Transfer-Encoding: base64" & L & _
          "Content-Disposition: attachment; filename=""" & N & """" & L & L & _
          Mid(Base, InStr(Base, L & L) + 4)
        End If : CF.Close : Set CF = Nothing : If C = 3 Then FSO.DeleteFile F
      End If
    End If : File.Close : Set File = Nothing : RF = ""
  End If : WSH.Exec(TCFS2 & " /ef tcm(540)")
Next : If A > 0 Then WSH.RegWrite P, A, "REG_DWORD" : Quit
Sub Quit : Set FSO = Nothing : Set WSH = Nothing : Set SHA = Nothing : WScript.Quit : End Sub
UUDeview + UUEnview
Ответить