Как скопировать несколько файлов в один?
Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер
BeardFury78
Это какой из? Хотя они оба морально устарели. Во втором так вообще многократный вызов cmd /c copy используется, да юникодные имена не читаются.
Это какой из? Хотя они оба морально устарели. Во втором так вообще многократный вызов cmd /c copy используется, да юникодные имена не читаются.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
-
BeardFury78
- Сообщения: 213
- Зарегистрирован: Чт авг 25, 2016 05:24
Flasher
Вот пользуюсь этим. Пока нет нареканий. Но если вы хотите, можете сделать вариант получше, буду тогда пользоваться вашим скриптом.
Вот пользуюсь этим. Пока нет нареканий. Но если вы хотите, можете сделать вариант получше, буду тогда пользоваться вашим скриптом.
-
BeardFury78
- Сообщения: 213
- Зарегистрирован: Чт авг 25, 2016 05:24
BeardFury78
Какая разница к кому? Первая кнопка у него прекрасно запишет в Юникод (UTF-16 LE без ВОМ), UTF-7/8 и т.д., если сами файлы были в той же кодировке.
Какая разница к кому? Первая кнопка у него прекрасно запишет в Юникод (UTF-16 LE без ВОМ), UTF-7/8 и т.д., если сами файлы были в той же кодировке.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
-
BeardFury78
- Сообщения: 213
- Зарегистрирован: Чт авг 25, 2016 05:24
BeardFury78
Ибо не ведает, что творит.
Главное - это совпадение (с учётом BOM).
Хотя по сути это же будет и с приведённым скриптом. Правда, сейчас я бы клеил по-другому.
Ибо не ведает, что творит.

Главное - это совпадение (с учётом BOM).
Хотя по сути это же будет и с приведённым скриптом. Правда, сейчас я бы клеил по-другому.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Кто подскажет скрипт, чтобы можно было:
─ Дописать все выделенные файлы в файл, который находится под курсором.
─ Получившийся файл имел название и расширение файла, который находился под курсором (с дополнением к имени (к примеру, "_общий файл")).
─ Возможность установки флага перезаписи или пропуска если такой файл уже существует.
По этой ссылке у меня скрипт вообще почему-то не работает.
Этот сценарий работает, но имя не берется по файлу, который под курсором и если такой файл уже существует, то происходит его перезапись...
─ Дописать все выделенные файлы в файл, который находится под курсором.
─ Получившийся файл имел название и расширение файла, который находился под курсором (с дополнением к имени (к примеру, "_общий файл")).
─ Возможность установки флага перезаписи или пропуска если такой файл уже существует.
По этой ссылке у меня скрипт вообще почему-то не работает.
Этот сценарий работает, но имя не берется по файлу, который под курсором и если такой файл уже существует, то происходит его перезапись...
Nick
Второй пункт противоречит первому.
Если файл находится где-нибудь в середине или в конце выделенного списка, то в какой последовательности записывать?
Сделал в той же (от первого).
[+] Отладил работу при наличии пустых файлов.
Второй пункт противоречит первому.
Если файл находится где-нибудь в середине или в конце выделенного списка, то в какой последовательности записывать?
Сделал в той же (от первого).
Код: Выделить всё
'••••••••••••••••••••••••••••• 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) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Имелось в виду, что создается новый файл (а не перезаписывается уже существующий) с новым именем.Flasher писал(а):Второй пункт противоречит первому.
Тогда, наверное по той сортировке, которая в текущий момент в TC.Flasher писал(а):Если файл находится где-нибудь в середине или в конце выделенного списка, то в какой последовательности записывать?
─ При написании имени в параметрах скрипта после %N (например, %N Общий файл) это имя добавляется после расширения, а хотелось бы, чтобы это было сделано до него. С параметрами "%O Новое имя%E" не получается.
─ Почему-то не работает при склеивании архива с файлом изображения.
Изображение не читается! При обычной склейке файлов через командную строку такого не происходит.
Например: copy "Новое изображение.jpg" /b + "Новый текстовый файл.txt" /b + "Новый архив.zip" /b "Новое изображение результат.jpg"
Что именно не получается? Нет точки перед расширением? Так кто мешает поставить?Nick писал(а):С параметрами "%O Новое имя%E" не получается.
По поводу читабельности изображения, которое после соединения уже представляет из себя нечто иное, я тоже не особо понял. Цель читать такое и не ставилась. Скрипт клеит побайтово, аналогично copy /b.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Flasher
Решил попробовать твой скрипт: http://forum.wincmd.ru/viewpost.php?p=123838
но появляется ошибка:
Кнопка:
Для проверки пробую объединить файлы с именами:
P.S. Total Commander v9.0a 32-bit, Windows 8.1 64-bit
Решил попробовать твой скрипт: http://forum.wincmd.ru/viewpost.php?p=123838
но появляется ошибка:
Код: Выделить всё
Сценарий: C:\ReadMe.vbs
Строка: 73
Символ: 5
Ошибка: Недопустимый вызов или аргумент процедуры
Код: 800A0005
Источник: Ошибка выполнения Microsoft VBScriptКод: Выделить всё
TOTALCMD#BAR#DATA
C:\ReadMe.vbs
%WL "%P" 2 %N
C:\Windows\System32\WScript.exe,2
ReadMe
-1
Код: Выделить всё
C:\AddDateTime.vbs
C:\CopyMove.vbsFlasher
Может снова проявилась особенность 64-bit версии ОС. Попробовал на виртуальной Windows XP 32-bit и там такой ошибки нет.Не вижу ошибок
TestScriptСкинь сами файлы