View previous topic :: View next topic |
Author |
Message |
Avada
Joined: 01 Aug 2008 Posts: 10267 Location: Россия, Саратов
|
(Separately) Posted: Sun Feb 21, 2010 12:20 Post subject: Вызов диалога переименования для единичного файла |
|
|
Проблема возникла как логическое продолжение вот этого моего поста. Пусть в неком каталоге есть отображаемый элемент [..] и, среди прочего, единичный файл или подкаталог, который мы хотим переименовать не в панели, как обычно, а в диалоге, в норме предназначенном для пакетного переименования. Именно в нём, а не в вызываемом по F6 общем диалоге переименования/перемещения!
Хотелось бы, имея под курсором объект, подлежащий переименованию, выполнять VBS-скриптом следующую цепочку действий:
• выделение объекта под курсором;
• выделение элемента [..];
• возврат курсора на исходный объект;
• вызов команды cm_RenameOnly для этой пары.
Результатом должно стать открытие диалога пакетного переименования для объекта под курсором.
И если скрипт случайно запущен в корневом каталоге, где не включено отображение [..], можно ли сделать так, чтобы просто сообщалось, что операция здесь неприменима? _________________ Даже самая богатая фантазия
Не представит себе наши безобразия. |
|
Back to top |
|
|
sa
Joined: 29 Apr 2009 Posts: 2571
|
(Separately) Posted: Sun Feb 21, 2010 19:29 Post subject: |
|
|
Вот что получилось на скорую руку:
Code: | ' Description: Вызов диалога пакетного переименования для файла под курсором
' Parameters: %N
' Requirements: WSH Helper for TC by Volniy
' Installation: Создайте для скрипта, например, кнопку на панели инструментов TC
' Autor: sa
Option Explicit
If WScript.Arguments.Count < 1 Then
MsgBox "Курсор не должен располагаться на строке ""..""", _
vbOKOnly + vbCritical, "Вызов диалога пакетного переименования"
WScript.Quit
End If
Dim TCS, P_N
Set TCS = CreateObject("TCScript.Helper")
TCS.LockTC True
TCS.SendCommand 524 'cm_ClearAll
P_N = TCS.GetSrcSelectedFiles(True)(0)
If InStrRev(P_N,"\") = Len(P_N) Then
P_N = Left(P_N,len(P_N)-1)
End If
P_N = Right(P_N,Len(P_N)-InStr(1,P_N,"\"))
If (TCS.INIRead(TCS.MainINI, "Configuration", "ShowParentDirInRoot", 0) = 1) Or _
Instr(1,P_N,"\") > 0 Then
TCS.SendKeystroke "{INSERT}{HOME}{INSERT}"
TCS.SendCommand 2053 'cm_GotoNextSelected
TCS.SendCommand 1002 'cm_RenameOnly
Else
MsgBox "Нет "".."" в корневом каталоге диска! Диалог неприменим.", _
vbOKOnly + vbSystemModal, "Вызов диалога пакетного переименования"
End If
TCS.LockTC False
Set TCS = Nothing
Wscript.Quit |
Last edited by sa on Mon Feb 22, 2010 06:30; edited 1 time in total |
|
Back to top |
|
|
Avada
Joined: 01 Aug 2008 Posts: 10267 Location: Россия, Саратов
|
(Separately) Posted: Sun Feb 21, 2010 21:53 Post subject: |
|
|
sa
Спасибо, но скрипт работать пока не хочет. При вызове кнопкой отображается сообщение "Курсор не должен располагаться..." и т.д. Курсор, естественно, там не располагается. Жму OK, ничего не происходит.
Кроме того, ИМХО, основная цепочка действий мне представлялась проще. Привожу просто в столбик:
cm_ClearAll
{INSERT}
{HOME}
{INSERT}
cm_GotoNextSelected
cm_RenameOnly
Или я что-то недопонял? И зачем cm_RereadSource? И как выясняется, что в корне нет [..]? _________________ Даже самая богатая фантазия
Не представит себе наши безобразия. |
|
Back to top |
|
|
sa
Joined: 29 Apr 2009 Posts: 2571
|
(Separately) Posted: Sun Feb 21, 2010 21:58 Post subject: |
|
|
Avada
В качестве параметра %N точно указан? |
|
Back to top |
|
|
Avada
Joined: 01 Aug 2008 Posts: 10267 Location: Россия, Саратов
|
(Separately) Posted: Sun Feb 21, 2010 22:25 Post subject: |
|
|
sa
Разумеется, забыл.
После добавления параметра при запуске имеем следующее:
Code: | ---------------------------
Сервер сценариев Windows
---------------------------
Сценарий: C:\Totalcmd\Utils\Scripts\SingleRenamer.vbs
Строка: 13
Символ: 1
Ошибка: Не удается найти указанный файл.
Код: 80070002
Источник: (null)
---------------------------
ОК
--------------------------- |
На кнопке путь запуска пустой. _________________ Даже самая богатая фантазия
Не представит себе наши безобразия. |
|
Back to top |
|
|
sa
Joined: 29 Apr 2009 Posts: 2571
|
(Separately) Posted: Sun Feb 21, 2010 22:37 Post subject: |
|
|
Avada
Скорее всего не установлен "Requirements: WSH Helper for TC by Volniy" |
|
Back to top |
|
|
Avada
Joined: 01 Aug 2008 Posts: 10267 Location: Россия, Саратов
|
(Separately) Posted: Sun Feb 21, 2010 23:20 Post subject: |
|
|
sa
Да нет, он установлен, но регистрация каким-то образом совсем недавно слетела, там все скрипты перестали работать. Восстановил.
Что ж, смотрим. В подкаталоге, где есть [..] (в том числе и в корневом), если опция включена, скрипт работает, спасибо. (Теперь я понял, зачем нужно перечитывание панели.)
А вот ситуация, когда у нас корень, но [..] в нём нет, обрабатывается не вполне корректно. Имеем предупреждение, что [..] нет в корневом каталоге. Хорошо, правильно. Что я должен ожидать, нажимая OK? Возврата в корень к исходному состоянию. Вместо этого я постоянно оказываюсь в виртуальной папке Корзина! Хорошо бы это как-то поправить.
И второй нюансик. Если в вызванном диалоге переименования я нажму OK, всё нормально. При нажатии же кнопки Отмена, диалог закрывается, но фильтрация по выделению автоматически не снимается. Можно с этим что-то сделать? _________________ Даже самая богатая фантазия
Не представит себе наши безобразия. |
|
Back to top |
|
|
sa
Joined: 29 Apr 2009 Posts: 2571
|
(Separately) Posted: Mon Feb 22, 2010 00:10 Post subject: |
|
|
Avada wrote: | Вместо этого я постоянно оказываюсь в виртуальной папке Корзина! | У меня работает нормально. Комбинация клавиш Ctrl+R случайно не переназначена? Что происходит, если строку Code: | TCS.SendKeystroke "^R" 'cm_RereadSource | закомментировать?
Avada wrote: | фильтрация по выделению автоматически не снимается. Можно с этим что-то сделать? | В данном варианте скрипта нет.
Возможно удастся обойти эту ситуацию в варианте с cm_GotoNextSelected. Но это уже завтра... |
|
Back to top |
|
|
Avada
Joined: 01 Aug 2008 Posts: 10267 Location: Россия, Саратов
|
(Separately) Posted: Mon Feb 22, 2010 00:31 Post subject: |
|
|
sa
Если закомментировать или вообще убрать, перехода в Корзину нет. Ctrl+R не переназначено. Но комбинация для перехода в Корзину у меня Ctrl+Shift+R. Похоже, в этом-то и причина. Пока поменял в скрипте на F2, которая у меня тоже в натуральном виде. Работает.
А что можно сделать с Ctrl+R? И зачем вообще нужна клавиша при наличии команды обновления как таковой? _________________ Даже самая богатая фантазия
Не представит себе наши безобразия. |
|
Back to top |
|
|
sa
Joined: 29 Apr 2009 Posts: 2571
|
(Separately) Posted: Mon Feb 22, 2010 00:54 Post subject: |
|
|
Переделал скрипт с использованием команды cm_GotoNextSelected. Скорректировал определение корневого диска без "..". |
|
Back to top |
|
|
Avada
Joined: 01 Aug 2008 Posts: 10267 Location: Россия, Саратов
|
(Separately) Posted: Mon Feb 22, 2010 10:32 Post subject: |
|
|
sa
Отлично. Единственная оставшаяся просьба: можно ли сделать предупреждающий диалог при вызове скрипта в корне без [..] по образу и подобию диалога, отображаемого при курсоре на [..]? То есть с таким же значком, расположенным не в заголовке? _________________ Даже самая богатая фантазия
Не представит себе наши безобразия. |
|
Back to top |
|
|
sa
Joined: 29 Apr 2009 Posts: 2571
|
(Separately) Posted: Mon Feb 22, 2010 10:46 Post subject: |
|
|
Avada wrote: | можно ли сделать предупреждающий диалог | Для этого достаточно поменять в последнем MsgBox vbSystemModal на vbCritical. |
|
Back to top |
|
|
Avada
Joined: 01 Aug 2008 Posts: 10267 Location: Россия, Саратов
|
(Separately) Posted: Mon Feb 22, 2010 10:59 Post subject: |
|
|
sa
Сделал. Что ж, спасибо за оперативность и качество работы! _________________ Даже самая богатая фантазия
Не представит себе наши безобразия. |
|
Back to top |
|
|
|