Вызов диалога переименования для единичного файла
Модераторы: d-view, Моторокер, Avada, CaptainFlint, Nik
Вызов диалога переименования для единичного файла
Проблема возникла как логическое продолжение вот этого моего поста. Пусть в неком каталоге есть отображаемый элемент [..] и, среди прочего, единичный файл или подкаталог, который мы хотим переименовать не в панели, как обычно, а в диалоге, в норме предназначенном для пакетного переименования. Именно в нём, а не в вызываемом по F6 общем диалоге переименования/перемещения!
Хотелось бы, имея под курсором объект, подлежащий переименованию, выполнять VBS-скриптом следующую цепочку действий:
• выделение объекта под курсором;
• выделение элемента [..];
• возврат курсора на исходный объект;
• вызов команды cm_RenameOnly для этой пары.
Результатом должно стать открытие диалога пакетного переименования для объекта под курсором.
И если скрипт случайно запущен в корневом каталоге, где не включено отображение [..], можно ли сделать так, чтобы просто сообщалось, что операция здесь неприменима?
Хотелось бы, имея под курсором объект, подлежащий переименованию, выполнять VBS-скриптом следующую цепочку действий:
• выделение объекта под курсором;
• выделение элемента [..];
• возврат курсора на исходный объект;
• вызов команды cm_RenameOnly для этой пары.
Результатом должно стать открытие диалога пакетного переименования для объекта под курсором.
И если скрипт случайно запущен в корневом каталоге, где не включено отображение [..], можно ли сделать так, чтобы просто сообщалось, что операция здесь неприменима?
Даже самая богатая фантазия
Не представит себе наши безобразия.
Не представит себе наши безобразия.
Вот что получилось на скорую руку:
Код: Выделить всё
' 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
Последний раз редактировалось sa Пн фев 22, 2010 05:30, всего редактировалось 1 раз.
sa
Спасибо, но скрипт работать пока не хочет. При вызове кнопкой отображается сообщение "Курсор не должен располагаться..." и т.д. Курсор, естественно, там не располагается. Жму OK, ничего не происходит.
Кроме того, ИМХО, основная цепочка действий мне представлялась проще. Привожу просто в столбик:
cm_ClearAll
{INSERT}
{HOME}
{INSERT}
cm_GotoNextSelected
cm_RenameOnly
Или я что-то недопонял? И зачем cm_RereadSource? И как выясняется, что в корне нет [..]?
Спасибо, но скрипт работать пока не хочет. При вызове кнопкой отображается сообщение "Курсор не должен располагаться..." и т.д. Курсор, естественно, там не располагается. Жму OK, ничего не происходит.
Кроме того, ИМХО, основная цепочка действий мне представлялась проще. Привожу просто в столбик:
cm_ClearAll
{INSERT}
{HOME}
{INSERT}
cm_GotoNextSelected
cm_RenameOnly
Или я что-то недопонял? И зачем cm_RereadSource? И как выясняется, что в корне нет [..]?
Даже самая богатая фантазия
Не представит себе наши безобразия.
Не представит себе наши безобразия.
sa
Разумеется, забыл.
После добавления параметра при запуске имеем следующее:
На кнопке путь запуска пустой.
Разумеется, забыл.
После добавления параметра при запуске имеем следующее:
Код: Выделить всё
---------------------------
Сервер сценариев Windows
---------------------------
Сценарий: C:\Totalcmd\Utils\Scripts\SingleRenamer.vbs
Строка: 13
Символ: 1
Ошибка: Не удается найти указанный файл.
Код: 80070002
Источник: (null)
---------------------------
ОК
---------------------------Даже самая богатая фантазия
Не представит себе наши безобразия.
Не представит себе наши безобразия.
sa
Да нет, он установлен, но регистрация каким-то образом совсем недавно слетела, там все скрипты перестали работать. Восстановил.
Что ж, смотрим. В подкаталоге, где есть [..] (в том числе и в корневом), если опция включена, скрипт работает, спасибо. (Теперь я понял, зачем нужно перечитывание панели.)
А вот ситуация, когда у нас корень, но [..] в нём нет, обрабатывается не вполне корректно. Имеем предупреждение, что [..] нет в корневом каталоге. Хорошо, правильно. Что я должен ожидать, нажимая OK? Возврата в корень к исходному состоянию. Вместо этого я постоянно оказываюсь в виртуальной папке Корзина! Хорошо бы это как-то поправить.
И второй нюансик. Если в вызванном диалоге переименования я нажму OK, всё нормально. При нажатии же кнопки Отмена, диалог закрывается, но фильтрация по выделению автоматически не снимается. Можно с этим что-то сделать?
Да нет, он установлен, но регистрация каким-то образом совсем недавно слетела, там все скрипты перестали работать. Восстановил.
Что ж, смотрим. В подкаталоге, где есть [..] (в том числе и в корневом), если опция включена, скрипт работает, спасибо. (Теперь я понял, зачем нужно перечитывание панели.)
А вот ситуация, когда у нас корень, но [..] в нём нет, обрабатывается не вполне корректно. Имеем предупреждение, что [..] нет в корневом каталоге. Хорошо, правильно. Что я должен ожидать, нажимая OK? Возврата в корень к исходному состоянию. Вместо этого я постоянно оказываюсь в виртуальной папке Корзина! Хорошо бы это как-то поправить.
И второй нюансик. Если в вызванном диалоге переименования я нажму OK, всё нормально. При нажатии же кнопки Отмена, диалог закрывается, но фильтрация по выделению автоматически не снимается. Можно с этим что-то сделать?
Даже самая богатая фантазия
Не представит себе наши безобразия.
Не представит себе наши безобразия.
У меня работает нормально. Комбинация клавиш Ctrl+R случайно не переназначена? Что происходит, если строкуAvada писал(а):Вместо этого я постоянно оказываюсь в виртуальной папке Корзина!
Код: Выделить всё
TCS.SendKeystroke "^R" 'cm_RereadSourceВ данном варианте скрипта нет.Avada писал(а):фильтрация по выделению автоматически не снимается. Можно с этим что-то сделать?
Возможно удастся обойти эту ситуацию в варианте с cm_GotoNextSelected. Но это уже завтра...
sa
Если закомментировать или вообще убрать, перехода в Корзину нет. Ctrl+R не переназначено. Но комбинация для перехода в Корзину у меня Ctrl+Shift+R. Похоже, в этом-то и причина. Пока поменял в скрипте на F2, которая у меня тоже в натуральном виде. Работает.
А что можно сделать с Ctrl+R? И зачем вообще нужна клавиша при наличии команды обновления как таковой?
Если закомментировать или вообще убрать, перехода в Корзину нет. Ctrl+R не переназначено. Но комбинация для перехода в Корзину у меня Ctrl+Shift+R. Похоже, в этом-то и причина. Пока поменял в скрипте на F2, которая у меня тоже в натуральном виде. Работает.
А что можно сделать с Ctrl+R? И зачем вообще нужна клавиша при наличии команды обновления как таковой?
Даже самая богатая фантазия
Не представит себе наши безобразия.
Не представит себе наши безобразия.
sa
Отлично. Единственная оставшаяся просьба: можно ли сделать предупреждающий диалог при вызове скрипта в корне без [..] по образу и подобию диалога, отображаемого при курсоре на [..]? То есть с таким же значком, расположенным не в заголовке?
Отлично. Единственная оставшаяся просьба: можно ли сделать предупреждающий диалог при вызове скрипта в корне без [..] по образу и подобию диалога, отображаемого при курсоре на [..]? То есть с таким же значком, расположенным не в заголовке?
Даже самая богатая фантазия
Не представит себе наши безобразия.
Не представит себе наши безобразия.