Автоматизация переноса атрибутов и времени изменения файлов

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

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

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

Сообщение Flasher »

LonerD писал(а):тут запрос простейший, сам справлюсь
Справился?
LonerD писал(а):иначе получается две команды - одна для активной, вторая для пассивной панели.
Считаю, что именно так и должно быть. Зачем кликать что-то в окне, если то же самое можно кликнуть на тулбаре, причём в более информативном представлении (иконка/подсказка)?

Подумал насчёт случая с выделенными файлами в пассивной панели. Не сказать, что это юзабильней. Я, например, выделение делаю в последнюю очередь, т.е. в любом случае у меня выбранное будет в активной панели. Если хотите, цепану Хелпер, не проблема (будет параметрический выбор инверсии). Если не надо, то выкладываю сейчас с рекурсией и закончим на этом. :?:
Аватара пользователя
LonerD
Сообщения: 1173
Зарегистрирован: Вт янв 04, 2011 03:56
Откуда: Макеевка
Контактная информация:

Сообщение LonerD »

Справился?
В какой-то мере. InputBox с диалогом: "Введите файл-источник: 1 - в активной панели, 2 - в пассивной".
Каким образом "рисовать окно с кнопками Пассивная/Активная" и присваивать переменной определённое значение при нажатии на одну или вторую кнопку - пока не знаю.

В общем, может кому пригодится.
Строку:

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

 File = .Item(0) : List = .Item(1) : Count = .Item(2)
заменить на

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

FileA = .Item(0) : File = .Item(1) : List = .Item(2) : Count = .Item(3) : Source = .Item(4)
Перед Set FSO добавить:

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

If Source = 0 Then Source = InputBox("Enter Source File or Dir:" & vbNewLine &_
                   "1 - Source file in Target panel" & vbNewLine &_
                    "2 - Source file in Active panel", "Source", 1)
On Error Resume Next
If Source = 2 Then
  File = FileA
  ElseIf Source <> 1 Then WScript.Quit
End If
Параметры запуска:

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

' Параметры: %V %T%M %WL <индекс замены> <индекс файла-источника>
' Индекс файла-источника принимает следующие значения:
' 1 - файл-источник - это выбранный файл пассивной панели
' 2 - файл-источник - это выбранный файл активной панели
' 0 - выдаётся запрос на указание файла-источника
случая с выделенными файлами в пассивной панели
Мне не надо.
Кстати, а если без Хэлпера, то можно ведь обойтись и nircmd.
Прописать выполнение команды Nircmd sendkeypress tab
перед и после присвоения параметров.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Ладно, тогда ждать остальных не будем, добавил рекурсию.
Теперь тебе придётся опять параметры править. :D
LonerD писал(а):Каким образом "рисовать окно с кнопками Пассивная/Активная" и присваивать переменной определённое значение при нажатии на одну или вторую кнопку - пока не знаю.
WSO/HTA.
LonerD писал(а):"Enter Source File or Dir:" & vbNewLine &_
"1 - Source file in Target panel"
Вас-вас? Ихь ферштэе нихьт, ворюбэр гейт ди Рэдэ! Майн Копф эксплодирт! Изображение

vbNewLine меняй на L.
Да, и опциональный выбор сам по себе бестолковый. Просто сделай себе вывод в окне, да и всё, а последний параметр убери. Тебе-то зачем плодить то, чем ты не будешь пользоваться?

On Error Resume Next лишнее, и, коли используешь, обнулять нужно обязательно, иначе все ошибки в скрипте будут игнорироваться. И, конечно, лучше не выходить при ошибке ввода, а снова показывать то же окно:

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

Do Until Source = 1 Or Source = 2
  Source = InputBox("Допустимые значения ввода:" &L&L& "1  (если источник в активной панели)" &L&L&_
  "2  (если источник в пассивной панели)", "    Присвоение даты и времени выбранным элементам")
  If Trim(Source) = "" Then WScript.Quit
Loop
LonerD писал(а):Кстати, а если без Хэлпера, то можно ведь обойтись и nircmd. Прописать выполнение команды Nircmd sendkeypress tab
перед и после присвоения параметров.
Не понял, как относится эмуляция Tab (которую легко можно сделать штатными средствами) к возможности брать список пассивной панели. Параметры кнопки TC преобразуются ещё до запуска приложения. Так что бесполезно (уже много раз обсуждалось).
Аватара пользователя
oshizelly
Сообщения: 52
Зарегистрирован: Вт сен 04, 2012 14:08

Сообщение oshizelly »

Выяснилась такая неприятная вещь: скрипт (обе версии) не срабатывает, если имя целевого файла содержит символы юникода (проверялось под Windows XP). Если юникодные символы содержатся только в исходном файле, то скрипт работает.
Это никак не лечится?
Аватара пользователя
Volniy
Сообщения: 585
Зарегистрирован: Ср дек 15, 2004 00:17
Откуда: Местный

Re: Автоматизация переноса атрибутов и времени...

Сообщение Volniy »

oshizelly писал(а):...Volniy написал замечательную утилитку CopyAttr.exe.... Однако TC за это время научился работать с юникодными именами файлов, а эта утилита - нет...
Сам удивлен, что на харде нашлись таки исходники (для чего оно писалось, я так и не вспомнил). Понимаю, что это нафик никому не нужно, но чисто из спортивного интереса просто переписал все функи на Unicode http://rghost.ru/40561546. Честно говоря, даже не пытался что-то менять в коде (кроме необходимых изменений под юникодность). Если кто решится проверить, сообщите результат. Thanks in advance!
Аватара пользователя
oshizelly
Сообщения: 52
Зарегистрирован: Вт сен 04, 2012 14:08

Сообщение oshizelly »

Volniy писал(а):Понимаю, что это нафик никому не нужно,
Просил бы воздержаться от подобных идейно вредных заявлений! Прога нужна партии и народу!

Вот только у неё почти та же беда, о которой я писал постом выше: перенос атрибутов не срабатывает, если любой из пары файлов содержит символы юникода (проверялось под Windows XP). Пишет, соответственно, "Ошибка получения атрибутов искодного файла! Ошибка: 2" и "Ошибка установки атрибутов целевого файла! Ошибка: 2"
Или, может, это у меня в системе что-то криво работает?

P.S.
Мой Symantec Security блокирует запуск и жестоко удаляет файл в карантин. Похоже, там внутри какой-то страшный троян. :lol: Зачем использовать некошерные упаковщики?
Аватара пользователя
Volniy
Сообщения: 585
Зарегистрирован: Ср дек 15, 2004 00:17
Откуда: Местный

Сообщение Volniy »

oshizelly писал(а): перенос атрибутов не срабатывает, если любой из пары файлов содержит символы юникода (проверялось под Windows XP). Пишет, соответственно, "Ошибка получения атрибутов искодного файла! Ошибка: 2" и "Ошибка установки атрибутов целевого файла! Ошибка: 2"

Или, может, это у меня в системе что-то криво работает?
Не знаю (Ошибка 2 = Файл не найден). Я ж говорю, что не тестировал. Как воссоздать мне у себя подобную ситуацию? Я бы сам посмотрел, что там не так.

PS Файл ничем не упакован. Абсолютно.
PPS Попробуй файлы с именами без пробелов. Может неправильно обрабатывались, хз. Надо будет посмотреть реализацию разборки параметров командной строки.
Аватара пользователя
oshizelly
Сообщения: 52
Зарегистрирован: Вт сен 04, 2012 14:08

Сообщение oshizelly »

Volniy писал(а):Как воссоздать мне у себя подобную ситуацию? Я бы сам посмотрел, что там не так.
Это просто. Windows XP, TC 8.01. В региональных настройках OS язык для не-юникодных программ (non-Unicode programs language) - русский? Тогда добавляем в имя файла пробел и любой символ из любой другой кодовой таблицы, например, немецкие диакритики ä, ü, ö. И пытаемся перенести атрибуты.
Volniy писал(а):Попробуй файлы с именами без пробелов. Может неправильно обрабатывались, хз.
Попробовал. Таки да, если имя без пробелов, то юникодные имена обрабатываются без проблем. И если с пробелами, но без юникода, то тоже без проблем. То есть, для получения проблемы нужно совпадение обоих условий. К сожалению, это совпадение, как правило, имеет место. :(
Volniy писал(а): Файл ничем не упакован. Абсолютно.
Ну, тогда не знаю, что им всем не нравится: https://www.virustotal.com/file/73b1829 ... 348561434/
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

oshizelly писал(а):скрипт (обе версии) не срабатывает, если имя целевого файла содержит символы юникода (проверялось под Windows XP).
Не подтверждаю. У меня всё работает (XP/7 x32).
Аватара пользователя
oshizelly
Сообщения: 52
Зарегистрирован: Вт сен 04, 2012 14:08

Сообщение oshizelly »

Flasher писал(а): У меня всё работает (XP/7 x32).
Два уточняющих вопроса:
1. В региональных настройках OS non-Unicode programs language - русский?
2. Какие юникодные символы содержатся в имени тестируемых файлов?
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

1. Да.
2. äüö.jpg - файл, с которого берётся дата.
Аватара пользователя
oshizelly
Сообщения: 52
Зарегистрирован: Вт сен 04, 2012 14:08

Сообщение oshizelly »

Flasher писал(а):2. äüö.jpg - файл, с которого берётся дата.
Ну так а я о чём говорю:
скрипт (обе версии) не срабатывает, если имя целевого файла содержит символы юникода (проверялось под Windows XP). Если юникодные символы содержатся только в исходном файле, то скрипт работает.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

oshizelly
Понял. Проблема исключительно nircmd. Тут уже ничего не поделать, кроме как не потревожить автора.
Аватара пользователя
Volniy
Сообщения: 585
Зарегистрирован: Ср дек 15, 2004 00:17
Откуда: Местный

Сообщение Volniy »

oshizelly писал(а):Тогда добавляем в имя файла пробел и любой символ из любой другой кодовой таблицы, например, немецкие диакритики ä, ü, ö. И пытаемся перенести атрибуты.
Пробовал-перепробовал. Работает. Может я что неправильно делаю? ;)
Не забываем параметры в кавычки помещать, если содержится пробел в пути и/или имени? Как вообще при тестах у тебя исполняется программа? Из командной строки Тотала?
Аватара пользователя
oshizelly
Сообщения: 52
Зарегистрирован: Вт сен 04, 2012 14:08

Сообщение oshizelly »

Volniy писал(а):Как вообще при тестах у тебя исполняется программа? Из командной строки Тотала?
Из кнопки. Вот код:

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

param50=""%p%n" "%t%m""
И потом, почему проблемы вызывает именно сочетание в имени юникод + пробел? А любое из двух условий по отдельности - нет.
Последний раз редактировалось oshizelly Ср сен 26, 2012 11:07, всего редактировалось 1 раз.
Ответить