Страница 17 из 42
Добавлено: Пт сен 17, 2010 06:42
taravasya
Flasher
О! Прозевал Ваш ответ. Спасибо большое. Я так понимю, без TCS эту задачку не решить? Это вообщем то не совсем то чего хотелось бы....
Во-первых при выполнении он начал ругаться, что типа того что объект не может sleep. Я убрал слип, но и потом,.. появляется диалог:
копировать файлы какого типа? А хотелось бы что бы всё саммо происходило. И кроме того, так происходит открытие на панели целевой папки. Этого-то и хотелось избежать. Так что бы нажал кнопку, и забыл, что там происходит...
Но всё равно спасибо.
Может быть появится время, и я его доделаю....
Добавлено: Пт сен 17, 2010 07:15
Flasher
taravasya
Просто я очень внимателен и взвешиваю каждую написанную фразу в поставленной задаче. Я там спецом выделил слова. Поэтому без Хелпера тут никак не обойтись. Или нужно ставить условия более грамотно.
Вопрос: условия скрипта выполнены? Если нет, то не удивительно, что там что-то выскакивает.
Sleep предотвращает преждевременное срабатывание команды до отработки предыдущей. Значение можно выбирать исходя из производительности системы, на современных машинах значения можно и уменьшить слегка.
Скрипт никаких действий со стороны пользователя не требует, ничего дополнительно нажимать не нужно.
Добавлено: Пт сен 17, 2010 07:31
taravasya
Возможно я не правильно высказался...
Ссмысл в том, что клиенты приносят мне свои носители с фотографиями. С этих носителей я сбрасываю фотки в "папки слежения" фотокиосков. Так происходит до 300 раз в день....

При этом не хотелось бы нарушать имеющуюся навигацию хотя бы одной панели... потому как "второй рукой" я в это время обрабатываю фотографии для печати.
Flasher писал(а):Скрипт никаких действий со стороны пользователя не требует
А как же с выбором типа файлов? Или это от того, что я убрал слипы?
Я кстати рылся по форуму после этого. Наковырял один скрипт от batya, немножко его изменил, и пытался использовать его в своих целях:
Код: Выделить всё
Option Explicit
' Проверяем число параметров
Dim Title
Title = "Копирование с помощью TC"
If WScript.Arguments.Count < 2 Then
MsgBox "Неправильно заданы параметры!", _
vbOKOnly + vbCritical, _
Title
WScript.Quit
End If
Dim FSO, OTF, MyFiles, TargetDir
Set FSO = CreateObject("Scripting.FileSystemObject")
Set OTF = FSO.OpenTextFile(WScript.Arguments(0), 1)
TargetDir = WScript.Arguments(1)
If Not FSO.FolderExists(TargetDir) Then
MsgBox "Неправильно задана целевая папка!", _
vbOKOnly + vbCritical, _
Title
Set FSO = Nothing
WScript.Quit
End If
Do While Not OTF.AtEndOfStream
MyFiles = OTF.ReadLine
If Not FSO.FileExists(TargetDir & FSO.GetFile(MyFiles).Name) Then
FSO.CopyFile MyFiles, TargetDir
End If
Loop
Set OTF = Nothing
Set FSO = Nothing
WScript.Quit
Выводится ошибка:
Разрешение отклонено
Что это значит?
Добавлено: Пт сен 17, 2010 08:21
Flasher
taravasya писал(а):не хотелось бы нарушать имеющуюся навигацию хотя бы одной панели... потому как "второй рукой" я в это время обрабатываю фотографии для печати.
Единствнный минус моего скрипта - это то, что курсор встанет на первый элемент списка в папке. Поэтому возвращаться к обрабатываемому файлу можно, например, через быстрый поиск по букве.
taravasya писал(а):А как же с выбором типа файлов? Или это от того, что я убрал слипы?
Ну я же их не для красоты туда поставил. И почему про выполнение условий ни слова не сказано? Или я сам должен додумывать? К тому же, никакого диалога "копировать файлы какого типа" я не знаю. Можно скриншот посмотреть?
taravasya писал(а):Наковырял один скрипт от batya
Почтение всё таки стоит проявить к человеку, которому точно есть, что сказать по этому поводу, с большой буквы ник пишется.
У меня
тот скрипт не работает с параметрами "%P" "%T". Лучше с этим вопросом обратиться к автору.
Ну и в любом случае этот вариант к
средству ТС никак не относится.
taravasya писал(а):Выводится ошибка:
Разрешение отклонено
Не знаю. Может это брендмауэр/файрвол/UAC ругается? В коде этого нет.
Добавлено: Пт сен 17, 2010 18:25
taravasya
По-порядку...
Ваш скрипт.
sleep-ы я сократил в два раза....

в четыре раза тоже самое...
Убираю слипы....
Сначало это:

а после выбора *.*, и нажатия ОК это:

А вот что происходит после запуска скрипта, который я позаимствовал у Batya:

Добавлено: Пт сен 17, 2010 18:28
taravasya
Со скриптом Batya, я вроде разобрался. Неверно был задан второй параметр TargetDir(я его без слеша в конце поставил)!!!а блин!!! наверное и Ваш скрипт из-за этого не сработал в конце!!!(кстати первый параметр %L)
Одако он копирует только файлы. Если я ставлю CopyFolder, то ошибка - файл не найден.... Может быть можно подправить параметр, так что-бы скрипт схавал папку. Правда тогда новая проблема возникнет... Нужен сразу фильтр расширений(что-бы рекурсивно с сохраненийм каталогов копировал, но только изображения)
Добавлено: Пт сен 17, 2010 19:50
Flasher
Ну если не поддерживает sleep, то очевидно, что версия Хелпера старая. Качайте и регистрируйте новую.
Второе окно выскакивает, потому что оно и должно выскакивать. Это диалог копирование/перемещения - и есть средство ТС, которое требовалось. Есть ещё средство ТС: диспетчер фоновой пересылки, но это уже другая песня. (А если Вам, как уже можно догадаться, было всё равно, средство это ТС, cmd или Explorer, что можно считать даже более логичным выбором, то надо написать пост в уже существующих темах, где параллельно решались подобные вопросы. К примеру,
здесь. Кол-во помощников сразу возрастёт.)
Сокращение слипов никакого положительного результата, кроме быстроты срабатывания скрипта не даст, поэтому тут стоит пока оставить как есть. Уменьшение значений может только подпортить картину. Можно ещё поменять
TCS.Sleep на
WScript.Sleep.
Ещё: Вы мне так и не ответили по поводу заданных условий в скрипте. Они выполнены?
taravasya писал(а):наверное и Ваш скрипт из-за этого не сработал в конце!!!
А причём тут мой скрипт? Мой скрипт запускается без всяких параметров, и его править нигде не надо. Достаточно только выделить файлы и нажать на кнопку или что там у Вас.
Там в условии так и задано.
Нужен сразу фильтр расширений(что-бы рекурсивно с сохраненийм каталогов копировал, но только изображения)
Это уже новое условие. Или в структуре кроме изображений ничего нет?
Тут промелькнула одна цитатка:
Volniy писал(а):А вообще-то я бы посоветовал копирование Тоталом не осуществлять. Зачем оно тут вааще, ведь его расширенные фичи не задействованы никак, просто копируются все файлы из каждой папки, так? Все, для чего тут нужен Тотал, это получение от него списка папок, содержимое которых нужно копировать и все. Ну, а далее:
Код: Выделить всё
For Each FItem In curFolder.SubFolders
fso.CopyFile FItem.Path & "\*.*", "F:\Dcim"
Next
и все дела.
Можно заменить *.* на маски с расширениями картинок, а вместо
"F:\Dcim" написать
WScript.Arguments(0) и внедрить в скрипт.
Добавлено: Пт сен 17, 2010 22:08
taravasya
Flasher писал(а):Качайте и регистрируйте новую.
А где? На оффсайте Total-а с плагинами 1-я версия beta. Есть что-то новее?
Вообщем вышло у меня кое-что:
Код: Выделить всё
Dim FSO, StartFolder, ReadStartFolder, EndFolder, FItem, curFolder
EndFolder= WScript.Arguments(1)
Set FSO = CreateObject("Scripting.FileSystemObject")
Set StartFolder = FSO.OpenTextFile(WScript.Arguments(0), 1)
ReadStartFolder = StartFolder.ReadLine
If Not FSO.FolderExists(EndFolder) Then
FSO.CreateFolder(EndFolder)
End If
If FSO.FolderExists(ReadStartFolder) = False Then
MsgBox "какаято ошибка!", vbCritical
WScript.Quit
End If
Set curFolder = FSO.GetFolder(ReadStartFolder)
For Each FItem In curFolder.SubFolders
FSO.CopyFile FItem.Path & "\*.*", EndFolder
Next
WScript.Sleep 500
WScript.Quit
Так происходит практически то что нужно.
Но есть пара ньюансов.
1)не работает если выделена папка с русским именем(причём если подпапка с руским именем то работает)
2)копирует не сохраняя структуру под-каталогов(а это очень важно)
3)нет никакого прогресс бара, или другого контролла(что-бы при необходимости можно было отменить копирование, ну и есстественно просто наблюдать сколько скопировалось, сколько осталось... и т.д.)
4)Возможно ли сделать какое нибудь подобие очереди копирования. Что-бы не начинать несколько потоков(а то при копировании с диска, такой подход повесит привод наглухо).
Спасибо за помощь!
Добавлено: Пт сен 17, 2010 22:48
Avada
taravasya писал(а): где? На оффсайте Total-а с плагинами 1-я версия beta. Есть что-то новее?
Есть-то есть. Беты 11 и 11Plus от марта-апреля этого года. Но вот со ссылкой работающей, похоже, проблемы: новые ссылки (например,
здесь) больше не работают, везде осталась максимум десятая бета. Кажется, пора заново выкладывать...
Добавлено: Пт сен 17, 2010 23:42
Flasher
Avada писал(а):Кажется, пора заново выкладывать...
Я уже
выкладывал, но ей жить осталось всего ничего..
taravasya
На мои вопросы отвечать будем? Или всё в одностороннем порядке?
1), 2), 3) в моём скрипте учтено.
про 4) я уже писал в самом начале.
Добавлено: Сб сен 18, 2010 00:34
taravasya
Flasher
Извените.
По Вашему скриту...
После обновления хелпера, скрипт заработал. В принципе всё окейно, но как я говорил мне не хотелось бы, что бы изменялась текущая папка на противоположной панели. Это одна из двух основных причин, почему я захотел сделать эту автоматизацию...
-----
Flasher писал(а):Мой скрипт запускается без всяких параметров,
А как-же этот:
Flasher писал(а):'Условия:
'1. Ключ в файле конфигурации AlwaysCopyInBackground=1
'2. Параметры: "<Путь назначения>"
Вот его то я и писал не правильно. Без слеша в конце.
----
Я сразу не заметил Вашей ссылки на эту тему:
http://forum.wincmd.ru/viewtopic.php?t= ... &&start=30
А когда писал предидущий пост, обратил на неё внимание...
Конкретно здесь:
http://forum.wincmd.ru/viewpost.php?p=67445
есть всё, что нужно. За исключением пожалуй прогресс-бара. Но всегда можно нажать ctrl-c...

Сейчас я ее немножко переделал и вместо xcopy, использовал robocopy. После изменений стала более подробная информация о прогрессе +маска файлов. +ищу графическую морду для robocopy(на TechNet есть информация о том, что создано GUI для этой утилиты).
В принципе больше склонен к Вашему скрипту(всё таки без окна командной строки), но то что изменяется правая панель не даст мне покоя. Возможно ли избавиться от этого недуга?
В любом случае, спасибо Вам большое за помощь. Хоть не скриптом, так ссылкой куда-надо.....
Добавлено: Сб сен 18, 2010 01:04
Flasher
taravasya писал(а):не хотелось бы, что бы изменялась текущая папка на противоположной панели.
У меня момент с изменением происходит незаметно, т.е. когда по логике сначала открывается папка назначения, потом возвращается в предыдущую, курсор, естественно, устанавливается на первом элементе списка, как я и писал ранее.
taravasya писал(а):А как-же этот:
Каюсь. Запамятовал.
taravasya писал(а):Конкретно здесь:
Чтобы избежать проблем с максимальным кол-вом копируемых папок, лучше использовать вот
этот вариант(сверху который).
taravasya писал(а):но то что изменяется правая панель не даст мне покоя. Возможно ли избавиться от этого недуга?
Ну там же есть возврат обратно в текущую папку, я же писал. Всё должно происходить практически незаметно, так как я использую LockTC. Поэкспериментируйте со вторым слипом, пробуйте значения 300, 400.. А сам ТС не позволит со своим диалогом копирования сделать иначе.
Тут ещё человек решал вопрос с прогресс-баром. Можно попросить у него состряпанную им же утилиту.
Добавлено: Сб сен 18, 2010 01:25
taravasya
Flasher писал(а):taravasya, замените лучше ссылкой код, здесь всё-таки топик по vb-скриптам. Либо процитируйте его в той ветке.
Исправился...
Раздуплился я свашим скриптом окончательно. У меня ведь не было ключа на копирование в фоне. ТОчнее он был в значении 0
Теперь действительно, смены каталогов не заметно совершенно. Вот если бы ещё в очередь их ставить. И по маске.......

Историю с прогресс баром я читал. Интересная идея, но пост там последний бог знает когда....
Добавлено: Сб сен 18, 2010 05:13
Flasher
taravasya писал(а):И по маске.
Код: Выделить всё
'Копировать структуру выделенных папок и файлов по маске
'с переименованием одинаковых имён по счётчику
'=====================================================
'Условия:
'1. Ключ в файле конфигурации AlwaysCopyInBackground=1
'2. Параметры: "%T%M" "<Путь назначения>" <маска_расширений>
' Пример: "%T%M" "C:\My Path" *.jpg;*.gif;*.png
'=====================================================
Dim TCS
Set TCS = CreateObject("TCScript.Helper")
If WScript.Arguments.Count = 0 Then
MsgBox "Не заданы параметры!", vbOKOnly + vbCritical, "Копирование"
WScript.Quit
End If
File = WScript.Arguments(0)
TCS.LockTC True
TCS.SetTrgPath(WScript.Arguments(1))
TCS.SendCommand "cm_CopyOtherpanel"
TCS.SendKeystroke "{TAB}"
TCS.SendKeystroke(Trim(WScript.Arguments(2)))
TCS.SendKeystroke "+{TAB 2}{SPACE}{DOWN 4}{ENTER}"
TCS.SetTrgPath(File)
TCS.LockTC False
Set TCS = Nothing
WScript.Quit
Убраны слипы, курсор в противоположной панели не теряется.
То же самое без Хелпера, но прыжок между каталогами виден:
Код: Выделить всё
'Копировать структуру выделенных папок и файлов по маске
'с переименованием одинаковых имён по счётчику
'=====================================================
'Условия:
'1. Ключ в файле конфигурации AlwaysCopyInBackground=1
'2. Параметры: "%T%M" "<Путь назначения>" <маска_расширений>
' Пример: "%T%M" "C:\My Path" *.jpg;*.gif;*.png
'=====================================================
Dim WSH
Set WSH = CreateObject("WScript.Shell")
If WScript.Arguments.Count = 0 Then
MsgBox "Не заданы параметры!", vbOKOnly + vbCritical, "Копирование"
WScript.Quit
End If
File = WScript.Arguments(0)
TCPath = WSH.ExpandEnvironmentStrings("%Commander_Path%") & "\totalcmd.exe"
WSH.Run """" & TCPath & """ /S /O /R=""" & WScript.Arguments(1) & """", 0, True
WSH.SendKeys "{F5}{TAB}"
WSH.SendKeys(Trim(WScript.Arguments(2)))
WSH.SendKeys "+{TAB 2}{ }{DOWN 4}{ENTER}"
WSH.Run """" & TCPath & """ /S /O /R=""" & File & """", 1, True
Set WSH = Nothing
WScript.Quit
Добавлено: Сб сен 18, 2010 05:27
taravasya
ВАУ!!! Спасибище огромное!!!