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

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

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

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

Сообщение Flasher »

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

Сообщение shveicar »

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

Сообщение Flasher »

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

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

кнопка

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

TOTALCMD#BAR#DATA
%ComSpec% /c for /f "delims=" %? in
('type "%WL"') do >"%%~dpn?.b64" (echo MIME-Version: 1.0&echo Content-Type: application/octet-stream; name="%%~nx?"&echo Content-Transfer-Encoding: base64&echo Content-Disposition: attachment; filename="%%~nx?"&echo.&base64.exe -e "%%?" -s)
wcmicons.dll,66
Выделенные файлы => MIME

1
-1
:!: проблемы с именами на кириллице

base64.exe http://www.f2ko.de/programs.php?lang=en&pid=b64
Последний раз редактировалось Tol!k Сб мар 17, 2012 17:12, всего редактировалось 1 раз.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Tol!k
Я эту прогу как-то пробовал раньше, на 7-ке не шла. Сейчас опробую ещё раз с твоим вариантом.

Добавлено спустя 5 минут:
Вроде, ОК (не считая кириллицы). Хотя я в основном на кириллице пишу.
Аватара пользователя
shveicar
Сообщения: 277
Зарегистрирован: Пн апр 18, 2011 01:54
Откуда: Россия Москва

Сообщение shveicar »

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

Сообщение Flasher »

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

'=========================================================
' Кодировать/декодировать выделенные файлы в/из MIME (b64)
' Параметры: %WL "<путь получателя>" "<упаковывать в zip>"
' Примеры:   %WL "%P"  |  %WL "%T" 1  |  %WL C:\Test 1
' Автор:  Flasher ©
'=========================================================
With WScript.Arguments
  C = .Count : If C = 0 Then WScript.Quit
  List = .Item(0) : Path = .Item(1)
End With : L = vbNewLine : Const M = 1
If Right(Path, 1) <> "\" Then Path = Path & "\"
Set XML    = CreateObject("MSXml2.DOMDocument")
Set FSO    = CreateObject("Scripting.FileSystemObject")
Set Stream = CreateObject("ADODB.Stream") : Stream.Type = 1
If C = 3 Then
  Set Shell = CreateObject("Shell.Application")
  Exts = "7z|7zip|zip|rar|cab|bzip|bz2|bzip2|arj|tar|gz|tgz"
  Temp = CreateObject("WScript.Shell").Environment("Process")("TEMP") & "\"
End If
For Each F in Split(FSO.GetFile(List).OpenAsTextStream(1, -1).ReadAll, L)
  If FSO.FileExists(F) Then
    If StrComp(FSO.GetExtensionName(F), "b64", 1) = 0 Then
      Set OF = FSO.OpenTextFile(F) : Code = OF.ReadAll : OF.Close
      LL = InStr(Code, L & L) : NN = InStr(Code, "filename=") + 10
      Set DE = XML.CreateElement("tmp") : DE.Text = Mid(Code, LL + 4)
      Stream.Open : DE.DataType = "bin.base64" : Stream.Write DE.NodeTypedValue
      Name = Mid(Code, NN, LL - NN - 1) : Rename Name
      Stream.SaveToFile Path & Name, 2
      Stream.Close : Set DE = Nothing : Set OF = Nothing
    Else
      If C = 3 Then
        If InStr(Exts, LCase(FSO.GetExtensionName(F))) = 0 Then
          NF = Temp & FSO.GetBaseName(F) & ".zip" : Set ZIP = FSO.CreateTextFile(NF)
          ZIP.Close : Set ZIP = Nothing
          Set ArchDir = Shell.NameSpace(NF) : ArchDir.CopyHere(F) : WScript.Sleep 50
          Size = 0 : Set AF = ArchDir.ParseName(FSO.GetFileName(F))
          Do Until Size = FSO.GetFile(F).Size : Size = AF.Size : Loop
          WScript.Sleep 10 : Set AF = Nothing : Set ArchDir = Nothing : F = NF
        End If
      End If
      Stream.Open : Stream.LoadFromFile(F)
      XML.LoadXML "<Base64Data />" : Set E = XML.documentElement
      E.DataType = "bin.base64" : E.NodeTypedValue = Stream.Read
      Stream.Close : Name = FSO.GetFileName(F)
      FName = FSO.GetBaseName(Name) & ".b64" : Rename FName
      Set File = FSO.OpenTextFile(Path & FName, 2, True)
      File.Write "MIME-Version: 1.0" & L & _
      "Content-Type: application/octet-stream; name=""" & Name & """" & L & _
      "Content-Transfer-Encoding: base64" & L & _
      "Content-Disposition: attachment; filename=""" & Name & """" & L & L & E.Text
      File.Close : Set E = Nothing : If C = 3 Then FSO.DeleteFile F, 1
    End If
  End If
Next : Set XML = Nothing : Set FSO = Nothing
Set Stream = Nothing : Set Shell = Nothing : WScript.Quit

Sub Rename(FileName)
  FN = FileName : n = 0
  Do While FSO.FileExists(Path & FileName)
    n = n + 1
    If l < 10^M Then PFix = Right(String(M, "0") & n, M) Else PFix = n
    FileName = FSO.GetBaseName(FN) & " (" & PFix & ")." & FSO.GetExtensionName(FN)
  Loop
End Sub
Минус - кодируется менее сжато, чем с ТС.
Проблем с кириллицей, естественно, нет, как и лишних пустых строк, которые ТС в конец (не понять - зачем) добавляет.
Последний раз редактировалось Flasher Вт мар 20, 2012 00:12, всего редактировалось 3 раза.
Serge Yolkin
Сообщения: 664
Зарегистрирован: Сб июл 25, 2009 11:12

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

Flasher
А скрипт точно бинарники обрабатывает? (Тестить времени нет).
FSO.OpenTextFile(F) на нуль-байте не споткнётся?
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Serge Yolkin
Не споткнётся. Список файлов - текст, b64 - текст. Когда появится время - отпишись.
Serge Yolkin
Сообщения: 664
Зарегистрирован: Сб июл 25, 2009 11:12

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

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

Сообщение Flasher »

Serge Yolkin
Дык а какая разница? :)
Serge Yolkin
Сообщения: 664
Зарегистрирован: Сб июл 25, 2009 11:12

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

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

Сообщение Flasher »

Serge Yolkin
В зачем его знать? Возьми, сохрани и используй. :wink:
Модифицировать что? Могу автопереименовалку при совпадении имён добавить. Чего ещё не хватает?
Аватара пользователя
shveicar
Сообщения: 277
Зарегистрирован: Пн апр 18, 2011 01:54
Откуда: Россия Москва

Сообщение shveicar »

Доброй ночи,
Да, скрипт хорош, что еще сказать... Единственное для меня удобнее %WL "%P" - впрочем кому надо, тот под себя настроит. (авто переименование будет лишним, какой в нем смысл?)
Flasher
Спасибо за помощь, (извини, если что не так) :wink: а то, уже начал думать что AutoHotkey будет по мощнее чем vbs - впрочем, каждому инструменту свое предназначение.
P.s Наконец, появилось время, буду изучать скрипты...
Последний раз редактировалось shveicar Пн мар 19, 2012 01:15, всего редактировалось 1 раз.
Serge Yolkin
Сообщения: 664
Зарегистрирован: Сб июл 25, 2009 11:12

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

Flasher
Не-е. С твоим методом поиграться надо.
Например: по ПКМ на файле выбираем "Энкодить", и результат - в буфере обмена. Можно вставлять ресурс в хэтэашку, открытую в редакторе.
Или так: сначала - в 7z, а уж потом энкодить. Для форума.
В общем, переведу, поиграюсь - поделюсь.
Ответить