Как создать папку и сразу перейти в нее одной кнопкой?

Обсуждение Total Commander. Установка, использование, настройка, решение проблем, скрытые функции. Обсуждение новых версий.

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

Ответить
aldares
Сообщения: 57
Зарегистрирован: Вт дек 28, 2004 11:50

Как создать папку и сразу перейти в нее одной кнопкой?

Сообщение aldares »

Была такая тема - про создание папок с именем состоящим из дат и т.д.
http://forum.wincmd.ru/viewtopic.php?t= ... sc&start=0
LocKtaR-o-DarK писал(а):Господа это можно сделать и без скриптов.
И довольно просто.

Для этого создаем новую кнопку

В строке "Команда" пишем В строке "Параметры" пишем

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

for /f "tokens=1,2,3,4 delims=. " %%a in ('date /t') do md "%%d%%c-%%b-%%a"
Значок на свое усмотрение, конечно же.

Формат отображения тоже.
Удачи.
Этого всего не нужно нужно просто создать папку

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

cmd /c
md description
Можно ли туда же прикрутить команду "cd description"?
Простейшим выходом, наверное, будет написать батник с этими двумя командами и запускать его, но может еще как-то можно извратиться?
Аватара пользователя
CaptainFlint
Сообщения: 6239
Зарегистрирован: Вт дек 14, 2004 22:34
Контактная информация:

Сообщение CaptainFlint »

Можно ли туда же прикрутить команду "cd description"?
Что-то не получается... Вообще говоря, cmd.exe позволяет объединять несколько команд вместе, но в данном случае это не прокатывает: команда cd отрабатывается интерпретатором cmd.exe, он сменяет каталог для себя самого, после чего благополучно завершается, а Тотал так и остаётся в неведении, что кто-то пытался сменить в нём каталог. Похоже, что скрипты - единственный способ, потому как даже BAT- и CMD-файлы выполняются командным интерпретатором, и смена каталога в них не прокатывает.
Почему же, ё-моё, ты нигде не пишешь "ё"?
aldares
Сообщения: 57
Зарегистрирован: Вт дек 28, 2004 11:50

Сообщение aldares »

Ага, вроде того. Попробую еще извратиться с переменными пути самого тотала типа %P...
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

В принципе, легко написать для этого vbs-скрипт. Только он будет использовать Script Helper, чтобы заставить TC выполнить команду перехода в папку. Подойдет?
Нет, я не сплю. Я просто медленно моргаю.
aldares
Сообщения: 57
Зарегистрирован: Вт дек 28, 2004 11:50

Сообщение aldares »

Пойдет. Если поможете, будет вообще замечательно, я полный ламер в vbs-скриптах.
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

aldares
Сохрани с расширением vbs. Запускай, как обычный exe-шник. Параметром можно указать название папки. Не забудь установить Script Helper.
Ограничение - если создаваемая папка уже существует, ничего не произойдет.

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

'========================================================
' Создание папки и переход в нее в TC

' В параметрах вызова из TC можно указать название папки,
' иначе будет вызван диалог ввода имени папки
'========================================================

Dim TCS, DirName, MB
Set TCS = CreateObject("TCScript.Helper")

if WScript.Arguments.Count > 0 then
  DirName = WScript.Arguments(0)
else
  DirName = InputBox("Введите имя создаваемой папки:", "Создание папки", "")
end if
if Len(DirName) = 0 then
  MB = MsgBox("Не задано имя папки!", vbOKOnly + vbExclamation, "Создание папки")
  WScript.Quit
end if

TCS.LockTC True
TCS.SendKeystroke("{F7}" & DirName & "{ENTER}" & "{ENTER}")
TCS.LockTC False

Set TCS = Nothing
WScript.Quit
aldares
Сообщения: 57
Зарегистрирован: Вт дек 28, 2004 11:50

Сообщение aldares »

Ха, оно работает, но, при вызове по шоткату из StartMenu появляется стандартное тоталовское окошко New directory, где уже вписано DirName ЗАГЛАВНЫМИ буквами. Как я понял

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

TCS.SendKeystroke("{F7}" & DirName & "{ENTER}" & "{ENTER}") 
посылает все эти клавиши самому тоталу, а не окошку создания папки.
Сделал

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

TCS.LockTC True 
TCS.SendKeystroke("{F7}" & DirName) 
TCS.SendKeystroke("{ENTER}" & "{ENTER}")
TCS.LockTC False 
Теперь создает и переходит (наверное, вообще 3 команды надо было, в каждой по энтеру). Осталось победить смену регистра.

Странно: если в меню нажать мышом команду - регистр не меняется, с шотката меняется. Причем, шоткаты у меня буквы - shift+d, shift+s - на разные папки. А со стандартными ctrl+alt+f(х) не работает.
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

SendKeystroke (SenKeys) вообще очень капризная команда.
Я сначала хотел вызывать командную строку и выполнять "cd ...", но возникают проблемы с SendKeystroke, если в TC включена русская раскладка. Пришлось переделать по-другому. Но и здесь засады :(
Заглавными буквами у тебя как раз потому что горячие клавиши с Shift-ом. (Что будет, если писать с нажатым Shift? ;) )

Как вариант, вставь паузу (время отпускания Shift-а):

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

WScript.Sleep 500
TCS.LockTC True 
TCS.SendKeystroke("{F7}" & DirName) 
TCS.SendKeystroke("{ENTER}" & "{ENTER}") 
TCS.LockTC False
Нет, я не сплю. Я просто медленно моргаю.
aldares
Сообщения: 57
Зарегистрирован: Вт дек 28, 2004 11:50

Сообщение aldares »

>>SendKeystroke (SenKeys) вообще очень капризная команда.
Ага, такие спецэффекты возникают...
Пробовал ставить паузу и секунду и 2, не помогает. Равно как и переназначение клавиш на другие, без шифта. Надо как-то строго обозначить переменную dirname, чтобы с ней ничего не делалось...
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

Хорошо, тогда вернемся к прежнему варианту... Тебя устроит работа скрипта только при включенной английской раскладке?
aldares
Сообщения: 57
Зарегистрирован: Вт дек 28, 2004 11:50

Сообщение aldares »

Устроит. Как правило английская и включена. Мне эта команда нужна для разгребания медиа-контента и конкретно для создания трех папок - description, sub и _misc.
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

Сделал через вызов TotalCmd.exe с параметрами. У этого способа пока не увидел вообще никаких недостатков.
Теперь сделал, что если создаваемая папка уже существует, ошибки не будет - переходим в эту папку.

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

'========================================================
' Создание папки и переход в нее в TC

' В параметрах вызова из TC можно указать название папки,
' иначе будет вызван диалог ввода имени папки
'========================================================

Dim FSO, TCS, WS, TotalCmd, DirName, DirPath, MB
Set FSO = CreateObject("Scripting.FileSystemObject")
Set TCS = CreateObject("TCScript.Helper")
Set WS  = WScript.CreateObject("WScript.Shell")
TotalCmd = """" & TCS.TCPath & "\totalcmd.exe"""

if WScript.Arguments.Count > 0 then
  DirName = WScript.Arguments(0)
else
  DirName = InputBox("Введите имя создаваемой папки:", "Создание папки", "")
end if
if Len(DirName) = 0 then
  MB = MsgBox("Не задано имя папки!", vbOKOnly + vbExclamation, "Создание папки")
  WScript.Quit
end if
DirPath = TCS.GetSrcPath & "\" & DirName

if not FSO.FolderExists(DirPath) then
  FSO.CreateFolder(DirPath)
end if
WS.Run TotalCmd & " /o /s """ & DirPath & """"

Set FSO = Nothing
Set TCS = Nothing
Set WC  = Nothing
WScript.Quit
ЗЫ. Кстати, при таком способе можно управлять не только активной панелью. Например, можно открыть созданную папку в противоположной панели.
aldares
Сообщения: 57
Зарегистрирован: Вт дек 28, 2004 11:50

Сообщение aldares »

Забавно. НО, главное, работает! Спасибо!
Чтобы в соседней панели открыть папку , как я понял нужно

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

WS.Run TotalCmd & " /o /s """ & DirPath & """"
поменять S на R

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

WS.Run TotalCmd & " /o /R """ & DirPath & """"
?
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

aldares
Чтобы в соседней панели открыть папку , как я понял нужно поменять S на R?
Не совсем. Нужно оставить ключ S, а перед путем вставить ключ /R=

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

WS.Run TotalCmd & " /o /s /r=""" & DirPath & """"
Нет, я не сплю. Я просто медленно моргаю.
Ответить