Как скопировать несколько файлов в один?

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

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

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

Сообщение Flasher »

Lisabon
Логика вставки верная. Но скрипт на строку увеличивался. Надо обновиться и переделать.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
Lisabon
Сообщения: 147
Зарегистрирован: Чт фев 17, 2011 23:11

Сообщение Lisabon »

Надо обновиться
Обновил скрипт и подправил, получил вот такое:

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

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
    With CreateObject("SAPI.SpFileStream")  
    .Open FP, 1 : .Seek Fl.Size : .Write Buff : Buff = "" : .Close
    End With
  Next
End With
Теперь ошибка вот такая:

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

Сценарий:	D:\Program\Total_Commander\Scripts\JoinBinFiles.vbs
Строка:	73
Символ:	5
Ошибка:	0x80045025
Код:	80045025
Источник: 	(null)
Но теперь есть прогресс в лучшую сторону. Создаваемый (объединённый) файл теперь не пустой, а теперь в него копируется содержимое, только одного файла (первого) из трёх.

Кнопка у меня вот такая:

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

TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Scripts\JoinBinFiles.vbs
%WL "%P" 2 %N
C:\Windows\System32\WScript.exe,2
JoinBinFiles


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

Сообщение Flasher »

Хм. А если так?:

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

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
End With
For i = N To Num - 1
  Fi = List(i) : C = 0 : If Left(Fi, 1) = "\" Then C = 2
  With CreateObject("SAPI.SpFileStream")
    If FP = Fi Then Buff = FMem : FMem = "" Else _
    .Open Fi, C : .Read Buff, Dic.Item(Fi) : .Close
  End With
  With CreateObject("SAPI.SpFileStream")
    .Open FP, 1 : .Seek Fl.Size : .Write Buff : Buff = "" : .Close
  End With
Next
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
Lisabon
Сообщения: 147
Зарегистрирован: Чт фев 17, 2011 23:11

Сообщение Lisabon »

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

Сообщение Flasher »

Lisabon
Эврика. :) А с длинными путями как?
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
Lisabon
Сообщения: 147
Зарегистрирован: Чт фев 17, 2011 23:11

Сообщение Lisabon »

Flasher

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

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

Сообщение Flasher »

Lisabon
Хорошо. Поздравляю.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Ответить