[Script] Копирование файлов по списку

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

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

SkYB
Сообщения: 23
Зарегистрирован: Сб мар 04, 2006 19:52
Откуда: Киев

Сообщение SkYB »

Rodny писал(а):
SkYB писал(а):что обозначают вот эти "параметры" - %L , %P , %T , %N и т.д.
Когда открыт диалог настройки панели инструментов - нажми Справка, откроется нужный раздел.
J? пасиба теперь яснее стало :roll:
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

SkYB писал(а):а можно ли в этот скрипт , вписать , чтоб он показывал какой нибудь прогресс бар
Сделал. Только при этом я не смогу отслеживать причину возможных ошибок копирования (в т.ч. принудительное нажатие кнопки "Отмена").
SkYB писал(а):и последнее , вот этот параметр
0 - копирование с сохранением структуры вложенных папок (по умолчанию)
- чёгото не работает. Если я правильно понял , то он должен , те файлы которые в списке - перекопировать в указанную директорию с такиме же папками как в списке
Прошу прощения, я не совсем верно описал этот вариант копирования. Он работает только, если в файле-списке указана папка, а не файл.
Добавил к скрипту еще один вариант копирования.
Описываю все на примере.
Имеем файл-список:

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

C:\File1.ext
C:\Folder1\File2.ext
C:\Folder2\Folder3\File3.ext
C:\Folder4\
При этом папка "C:\Folder4" содержит

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

C:\Folder4\File4.ext
C:\Folder4\Folder5\File5.ext
В результате копирования в папку "C:\Folder6" при разных режимах имеем:
0:

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

C:\Folder6\File1.ext
C:\Folder6\File2.ext
C:\Folder6\File3.ext
C:\Folder6\File4.ext
C:\Folder6\Folder5\File5.ext
В данном случае структура сохраняется только при копировании папок.

1:

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

C:\Folder6\File1.ext
C:\Folder6\File2.ext
C:\Folder6\File3.ext
C:\Folder6\File4.ext
C:\Folder6\File5.ext
Все файлы копируются в целевую папку без разбивки по вложенным папкам.

2:

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

C:\Folder6\File1.ext
C:\Folder6\Folder1\File2.ext
C:\Folder6\Folder2\Folder3\File3.ext
C:\Folder6\Folder4\File4.ext
C:\Folder6\Folder4\Folder5\File5.ext
Копирование выполняется с сохранением полной структуры вложенности до корня диска.
Нет, я не сплю. Я просто медленно моргаю.
SkYB
Сообщения: 23
Зарегистрирован: Сб мар 04, 2006 19:52
Откуда: Киев

Сообщение SkYB »

Просто зе Бест, огромное пасиба ещё раз, лучше и не придумать. Угостил бы пивом , только жаль живём далековато :wink:
DrShark
Сообщения: 911
Зарегистрирован: Сб окт 21, 2006 20:27
Откуда: Kyiv, Ukraine
Контактная информация:

Сообщение DrShark »

2Batya
Скрипт для копирования по списку - отличная работа.
Обнаружил несколько багов/недочётов под Windows Vista (позже проверю на XP):
1) не во всех режимах вызывается прогресс бар;
2) не работает режим принудительной перезаписи
(когда Const Overwrite = True, всё равно появляется запрос на перезапись)
3) в меню, в которых используется параметр "", появляется ошибка:

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

---------------------------
Windows Script Host
---------------------------
Сценарий:	C:\totalcmd\Utils\Copy_from_list_2.vbs
Строка:	264
Символ:	3
Ошибка:	Требуется объект: 'oSA'
Код:	800A01A8
Источник: 	Ошибка выполнения Microsoft VBScript

---------------------------
ОК   
---------------------------
Собственно, вот моя секция меню Запуск из wincmd.ini, в которую я прописал все варианты работы скрипта:
http://rapidshare.com/files/125496821/u ... u.zip.html
В файле Copy_from_list_2.vbs Overwrite = False, а в Copy_from_list_2_overwrite.vbs - True
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

DrShark писал(а):1) не во всех режимах вызывается прогресс бар;
От режима не должно зависеть. Прогресс может не появляться, если копируются файлы небольшого размера. Если это не так, можно подробности?
DrShark писал(а):2) не работает режим принудительной перезаписи
(когда Const Overwrite = True, всё равно появляется запрос на перезапись)
Поправил.
DrShark писал(а):3) в меню, в которых используется параметр "", появляется ошибка
Поправил.
Нет, я не сплю. Я просто медленно моргаю.
DrShark
Сообщения: 911
Зарегистрирован: Сб окт 21, 2006 20:27
Откуда: Kyiv, Ukraine
Контактная информация:

Сообщение DrShark »

Batya писал(а):
DrShark писал(а):1) не во всех режимах вызывается прогресс бар;
От режима не должно зависеть. Прогресс может не появляться, если копируются файлы небольшого размера. Если это не так, можно подробности?
Мне ещё ни разу не удалось увидеть прогресс при использовании режима "1 - копирование всех файлов в корень целевой папки;", даже при копировании содержимого в несколько гигабайт.
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

DrShark писал(а):Мне ещё ни разу не удалось увидеть прогресс при использовании режима "1 - копирование всех файлов в корень целевой папки;", даже при копировании содержимого в несколько гигабайт.
Странно, у меня прогресс появляется.
Еще раз подчеркну - прогресс-бар появляется только при копировании больших файлов. Если копируются мелкие, он не появляется. Это не моя прихоть, так работает стандарный COM-объект. Если выполняется копирование папки с параметром 1, то я рекурсивно запускаю копирование для каждого файла, в не для всей папки сразу. Т.е., если у тебя в копируемой папке миллион файлов по 1 кб, по прогресс не появится, а вот для одного файла на 1 Гб прогресс появится.
Нет, я не сплю. Я просто медленно моргаю.
SkYB
Сообщения: 23
Зарегистрирован: Сб мар 04, 2006 19:52
Откуда: Киев

Сообщение SkYB »

Подтверждаю , что прогресс бар появляется - у меня всё пашет на ура , спасибо автору ! :wink:
DrShark
Сообщения: 911
Зарегистрирован: Сб окт 21, 2006 20:27
Откуда: Kyiv, Ukraine
Контактная информация:

Сообщение DrShark »

Да, точно, на больших файлах прогресс появляется.
Реквест к скрипту: поддержка в файле-списке путей вида
file://localhost/X:/Somedir/
file://localhost/X:/Somedir/file.xyz
т.к. часто приходится брать пути из браузера или веб-редактора.
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

DrShark писал(а):Реквест к скрипту: поддержка в файле-списке путей вида
file://localhost/X:/Somedir/
file://localhost/X:/Somedir/file.xyz
Готово.
Нет, я не сплю. Я просто медленно моргаю.
LA_
Сообщения: 31
Зарегистрирован: Чт дек 07, 2006 09:21

Сообщение LA_ »

товарищи, а может ли кто-нить помочь со скриптом, который при запуске будет брать все файлы и вложенные папки из текущей папки, но за исключением заранее заданных папок и файлов (список можно прописать в самом скрипте - он не меняется), и из этих файлов-папок создавать рар-архив с заданным именем (имя также не меняется) + добавленной датой в конце в формате YYYYMMDD в папке bak?
LA_
Сообщения: 31
Зарегистрирован: Чт дек 07, 2006 09:21

Сообщение LA_ »

Batya
LA_
vbs-скрипт, использующий Script Helper:
Код:
'=======================================================
' Создание текстового файла с содержимым буфера обмена
'=======================================================
господа, а можно ли теперь то же самое сделать, но без Script Helper?
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

LA_ писал(а):господа, а можно ли теперь то же самое сделать, но без Script Helper?
А в чем проблема использования Script Helper?
В данном скрипте ключевые слова - "буфер обмена". Для работы с буфером обмена нужен специальный сторонний COM-объект. В качестве такового может выступать либо Script Helper, либо что-то другое.
LA_ писал(а):товарищи, а может ли кто-нить помочь со скриптом, который при запуске будет брать все файлы и вложенные папки из текущей папки, но за исключением заранее заданных папок и файлов
Кто-нибудь может ;)
Только сейчас совсем нет свободного времени. Через недельку.
Нет, я не сплю. Я просто медленно моргаю.
LA_
Сообщения: 31
Зарегистрирован: Чт дек 07, 2006 09:21

Сообщение LA_ »

А в чем проблема использования Script Helper?
осознал, что он используется лишь для этого скрипта у меня.
интересно понять можно ли обойтись без него.
Для работы с буфером обмена нужен специальный сторонний COM-объект. В качестве такового может выступать либо Script Helper, либо что-то другое.
похоже, что этим чем-то другим может быть IE:
Neither WSH nor VBScript are able to interact with the clipboard: neither one allows you to copy data to the clipboard and or to paste data from the clipboard. Internet Explorer, on the other hand, can interact with the clipboard.
ссылка
LA_
Сообщения: 31
Зарегистрирован: Чт дек 07, 2006 09:21

Сообщение LA_ »

ага. точнее должно быть вот так:

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

'=======================================================
' Создание текстового файла с содержимым буфера обмена
'=======================================================

Option Explicit
Dim FileName
'========== Изменяемые параметры =======================
FileName  = "descript.txt" ' Имя создаваемого файла
'=======================================================
Dim objIE, Clip, Btn, FSO, OTL, Mess, Title

Set objIE = CreateObject("InternetExplorer.Application")
objIE.Navigate("about:blank")
Clip = objIE.document.parentwindow.clipboardData.GetData("text")
Set objIE = Nothing

If Len(Clip) > 0 Then
  Set FSO = CreateObject("Scripting.FileSystemObject")
  If FSO.FileExists(FileName) Then
    Mess = "Буфер обмена содержит текст." & vbNewLine & _
           "Заменить содержимое файла " & FileName & _
           " текстом из буфера обмена?" & vbNewLine
    Title = "Замена содержимого файла"
  Else
    Mess = "Буфер обмена содержит текст." & vbNewLine & _
           "Создать файл " & FileName & _
           " с содержимым буфера обмена?" & vbNewLine
    Title = "Создание текстового файла"
  End If
  Btn = MsgBox(Mess, vbYesNo + vbQuestion, Title)
  If Btn = 7 Then 'Кнопка No
    Set FSO = Nothing
    WScript.Quit
  End If
Else
  WScript.Quit
End If

Set OTL = FSO.OpenTextFile(FileName, 2, True)
OTL.Write Clip
OTL.Close

Set OTL = Nothing
Set FSO = Nothing
WScript.Quit
Ответить