Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Как скопировать несколько файлов в один?
Goto page Previous  1, 2, 3, 4, 5, 6  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Mon Feb 06, 2017 18:32    Post subject: Reply with quote

BeardFury78
Это какой из? Хотя они оба морально устарели. Во втором так вообще многократный вызов cmd /c copy используется, да юникодные имена не читаются.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
BeardFury78



Joined: 25 Aug 2016
Posts: 213

Post (Separately) Posted: Mon Feb 06, 2017 18:39    Post subject: Reply with quote

Flasher
Вот пользуюсь этим. Пока нет нареканий. Но если вы хотите, можете сделать вариант получше, буду тогда пользоваться вашим скриптом.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Mon Feb 06, 2017 18:41    Post subject: Reply with quote

BeardFury78
Если нет нареканий, то к чему было?:
BeardFury78 wrote:
но уникод нужен

_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
BeardFury78



Joined: 25 Aug 2016
Posts: 213

Post (Separately) Posted: Mon Feb 06, 2017 18:44    Post subject: Reply with quote

Flasher
Это к Dimsok-y было по поводу его первой кнопки до того как он добавил вторую кнопку.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Mon Feb 06, 2017 18:46    Post subject: Reply with quote

BeardFury78
Какая разница к кому? Первая кнопка у него прекрасно запишет в Юникод (UTF-16 LE без ВОМ), UTF-7/8 и т.д., если сами файлы были в той же кодировке.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
BeardFury78



Joined: 25 Aug 2016
Posts: 213

Post (Separately) Posted: Mon Feb 06, 2017 18:52    Post subject: Reply with quote

Flasher
Ну Dimsok сам утверждал, что если уникод не нужен, то можно пользоваться первой кнопкой, а так как файлы у меня только utf-8 в основном лежат, то думал, что такая кнопка не пригодится и не тестировал поэтому. Не знаю почему Dimsok так сказал. Smile
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Mon Feb 06, 2017 18:54    Post subject: Reply with quote

BeardFury78
Ибо не ведает, что творит.
Главное - это совпадение (с учётом BOM).
Хотя по сути это же будет и с приведённым скриптом. Правда, сейчас я бы клеил по-другому.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Nick



Joined: 26 Dec 2014
Posts: 107

Post (Separately) Posted: Sat Aug 26, 2017 14:16    Post subject: Reply with quote

Кто подскажет скрипт, чтобы можно было:
Дописать все выделенные файлы в файл, который находится под курсором.
Получившийся файл имел название и расширение файла, который находился под курсором (с дополнением к имени (к примеру, "_общий файл")).
Возможность установки флага перезаписи или пропуска если такой файл уже существует.

По этой ссылке у меня скрипт вообще почему-то не работает.
Этот сценарий работает, но имя не берется по файлу, который под курсором и если такой файл уже существует, то происходит его перезапись...
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Sat Aug 26, 2017 15:33    Post subject: Reply with quote

Nick
Второй пункт противоречит первому.
Если файл находится где-нибудь в середине или в конце выделенного списка, то в какой последовательности записывать?

Сделал в той же (от первого).
Code:
'••••••••••••••••••••••••••••• VBS ••••••••••••••••••••••••••••
' Бинарное соединение файлов, выделенных в активной панели ТC
'
' Параметры: %WL
' Дополнительные (иначе дозапись осуществляется в первый файл):
' "<путь получателя при создании>" <режим записи> "<имя файла>"
'
' Режим записи принимает следующие значения:
'  0 = перезаписывать существующий файл;     (по умолчанию)
'  1 = не создавать файл при существовании;
'  2 = добавлять счётчик к имени нового файла.
'
' Ключ для удаления исходных файлов: /del
'
' Примеры:   %WL /del   |   %WL "%T" 2   |   %WL "%P" 0 %N
'••••••••••••••••••••••••••••••••••••••••• Автор: Flasher © •••

Option Explicit: Dim Mode, Del, C, List, Name, Path, Er, Rgx,_
Col, Dic, FSO, FP, BN, Ext, i, Fi, N, Num, Fl, Arr, FMem, Buff

With WSH.Arguments
  Mode = 0 : Del = .Named.Exists("del")
  C = .UnNamed.Count : If C = 0 Then WSH.Quit
  List = .Item(0) : If C = 4 Then Name = .Item(3)
  If C > 1 Then Path = .Item(1) : Mode = .Item(2)
End With

If C = 3 Then
  Set Rgx = New RegExp : Rgx.Pattern = "[""/*\\:|?<>]"
  While Rgx.Test(Name) Or IsEmpty(Name)
    If Not IsEmpty(Name) Then Er = Space(38) & "Некорректное имя!"
    Name = RTrim(InputBox(String(3, vbCr) & Er & vbCr & vbCr &_
    "Введите имя нового файла:", " Соединение файлов", Name))
  Wend : If Name = "" Then WSH.Quit
End If

Set Col = CreateObject("Scripting.Dictionary")
Set Dic = CreateObject("Scripting.Dictionary")
Set FSO = CreateObject("Scripting.FileSystemObject")
If C > 1 Then
  FP = FSO.BuildPath(Path, Name)
  If Len(FP) > 259 Then FP = "\\?\" & FP : Path = "\\?\" & Path
  If Mode = 1 Then
    If FSO.FileExists(FP) Or FSO.FolderExists(FP) Then WSH.Quit
  ElseIf Mode = 2 Then
    BN = FSO.GetBaseName(Name) : Ext = FSO.GetExtensionName(FP)
    If Len(Ext) Then Ext = "." & Ext
    While FSO.FileExists(FP) Or FSO.FolderExists(FP)
      i = i + 1 : FP = FSO.BuildPath(Path, BN & " (" & i & ")" & Ext)
    Wend
  End If
End If

Set List = FSO.OpenTextFile(List,,,-1)
Do : Fi = List.ReadLine
  If Len(Fi) > 259 Then Fi = "\\?\" & Fi
  If FSO.FileExists(Fi) Then Col.Add Fi, "" : _
  Num = FSO.GetFIle(Fi).Size : If Num Then Dic.Add Fi, Num
Loop Until List.AtEndOfStream : List.Close : N = 0
Num = Dic.Count : If Num = 0 Then WSH.Quit
Arr = Col.Keys : If C = 1 Then FP = Arr(0)
List = Dic.Keys : If Num = 1 And FP = List(0) Then WSH.Quit
If Not FSO.FileExists(FP) Then FSO.CreateTextFile(FP).Close
Set Fl = FSO.GetFile(FP) : If C = 1 And Dic.Exists(FP) Then N = 1

With CreateObject("SAPI.SpFileStream")
  If Dic.Exists(FP) And FP <> List(0) Then _
  .Open FP, 2 : .Read FMem, Fl.Size :_
  .Close : Fl.OpenAsTextStream(2).Close
  For i = N To Num - 1
    Fi = List(i) : C = 0 : If Left(Fi, 1) = "\" Then C = 2
    If FP = Fi Then Buff = FMem : FMem = "" Else _
    .Open Fi, C : .Read Buff, Dic.Item(Fi) : .Close 
    .Open FP, 1 : .Seek Fl.Size : .Write Buff : Buff = "" : .Close
  Next
End With

If Del Then For Each i in Arr :_
If i <> FP Then FSO.DeleteFile i, 1 End If : Next
CreateObject("WScript.Shell").PopUp _
"Файлы соединены!", 0.6, " Соединение файлов", 4160

[+] Отладил работу при наличии пустых файлов.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Nick



Joined: 26 Dec 2014
Posts: 107

Post (Separately) Posted: Mon Sep 04, 2017 13:57    Post subject: Reply with quote

Flasher wrote:
Второй пункт противоречит первому.
Имелось в виду, что создается новый файл (а не перезаписывается уже существующий) с новым именем.
Flasher wrote:
Если файл находится где-нибудь в середине или в конце выделенного списка, то в какой последовательности записывать?
Тогда, наверное по той сортировке, которая в текущий момент в TC.

─ При написании имени в параметрах скрипта после %N (например, %N Общий файл) это имя добавляется после расширения, а хотелось бы, чтобы это было сделано до него. С параметрами "%O Новое имя%E" не получается.

─ Почему-то не работает при склеивании архива с файлом изображения. Question
Изображение не читается! При обычной склейке файлов через командную строку такого не происходит.
Например: copy "Новое изображение.jpg" /b + "Новый текстовый файл.txt" /b + "Новый архив.zip" /b "Новое изображение результат.jpg"
Back to top
View user's profile Send private message
Avada



Joined: 01 Aug 2008
Posts: 10236
Location: Россия, Саратов

Post (Separately) Posted: Mon Sep 04, 2017 14:19    Post subject: Reply with quote

Nick
Читабельный результат при склейке текстовых файлов с бинарниками — это что-то новое...
_________________
Даже самая богатая фантазия
Не представит себе наши безобразия.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Mon Sep 04, 2017 18:44    Post subject: Reply with quote

Nick wrote:
С параметрами "%O Новое имя%E" не получается.
Что именно не получается? Нет точки перед расширением? Так кто мешает поставить?

По поводу читабельности изображения, которое после соединения уже представляет из себя нечто иное, я тоже не особо понял. Цель читать такое и не ставилась. Скрипт клеит побайтово, аналогично copy /b.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Lisabon



Joined: 18 Feb 2011
Posts: 147

Post (Separately) Posted: Fri Sep 08, 2017 08:37    Post subject: Reply with quote

Flasher
Решил попробовать твой скрипт: http://forum.wincmd.ru/viewpost.php?p=123838
но появляется ошибка:
Code:
Сценарий:   C:\ReadMe.vbs
Строка:   73
Символ:   5
Ошибка:   Недопустимый вызов или аргумент процедуры
Код:   800A0005
Источник:    Ошибка выполнения Microsoft VBScript

Кнопка:
Code:
TOTALCMD#BAR#DATA
C:\ReadMe.vbs
%WL "%P" 2 %N
C:\Windows\System32\WScript.exe,2
ReadMe


-1

Для проверки пробую объединить файлы с именами:
Code:
C:\AddDateTime.vbs
C:\CopyMove.vbs

P.S. Total Commander v9.0a 32-bit, Windows 8.1 64-bit
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Fri Sep 08, 2017 16:56    Post subject: Reply with quote

Lisabon
Не вижу ошибок. Скинь сами файлы.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Lisabon



Joined: 18 Feb 2011
Posts: 147

Post (Separately) Posted: Fri Sep 08, 2017 17:20    Post subject: Reply with quote

Flasher
Quote:
Не вижу ошибок

Может снова проявилась особенность 64-bit версии ОС. Попробовал на виртуальной Windows XP 32-bit и там такой ошибки нет.

Quote:
Скинь сами файлы

TestScript
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander All times are GMT + 4 Hours
Goto page Previous  1, 2, 3, 4, 5, 6  Next
Page 4 of 6

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group