Страница 1 из 1
Как создать папку и сразу перейти в нее одной кнопкой?
Добавлено: Вт апр 18, 2006 10:51
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"
Значок на свое усмотрение, конечно же.
Формат отображения тоже.
Удачи.
Этого всего не нужно нужно просто создать папку
Можно ли туда же прикрутить команду "cd description"?
Простейшим выходом, наверное, будет написать батник с этими двумя командами и запускать его, но может еще как-то можно извратиться?
Добавлено: Вт апр 18, 2006 13:26
CaptainFlint
Можно ли туда же прикрутить команду "cd description"?
Что-то не получается... Вообще говоря, cmd.exe позволяет объединять несколько команд вместе, но в данном случае это не прокатывает: команда cd отрабатывается интерпретатором cmd.exe, он сменяет каталог для себя самого, после чего благополучно завершается, а Тотал так и остаётся в неведении, что кто-то пытался сменить в нём каталог. Похоже, что скрипты - единственный способ, потому как даже BAT- и CMD-файлы выполняются командным интерпретатором, и смена каталога в них не прокатывает.
Добавлено: Вт апр 18, 2006 14:35
aldares
Ага, вроде того. Попробую еще извратиться с переменными пути самого тотала типа %P...
Добавлено: Вт апр 18, 2006 14:47
Batya
В принципе, легко написать для этого vbs-скрипт. Только он будет использовать
Script Helper, чтобы заставить TC выполнить команду перехода в папку. Подойдет?
Добавлено: Чт апр 20, 2006 07:13
aldares
Пойдет. Если поможете, будет вообще замечательно, я полный ламер в vbs-скриптах.
Добавлено: Чт апр 20, 2006 11:15
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
Добавлено: Чт апр 20, 2006 12:04
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(х) не работает.
Добавлено: Чт апр 20, 2006 13:29
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
Добавлено: Чт апр 20, 2006 13:54
aldares
>>SendKeystroke (SenKeys) вообще очень капризная команда.
Ага, такие спецэффекты возникают...
Пробовал ставить паузу и секунду и 2, не помогает. Равно как и переназначение клавиш на другие, без шифта. Надо как-то строго обозначить переменную dirname, чтобы с ней ничего не делалось...
Добавлено: Чт апр 20, 2006 14:49
Batya
Хорошо, тогда вернемся к прежнему варианту... Тебя устроит работа скрипта только при включенной английской раскладке?
Добавлено: Пт апр 21, 2006 12:38
aldares
Устроит. Как правило английская и включена. Мне эта команда нужна для разгребания медиа-контента и конкретно для создания трех папок - description, sub и _misc.
Добавлено: Пт апр 21, 2006 13:50
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
ЗЫ. Кстати, при таком способе можно управлять не только активной панелью. Например, можно открыть созданную папку в противоположной панели.
Добавлено: Ср апр 26, 2006 06:19
aldares
Забавно. НО, главное, работает! Спасибо!
Чтобы в соседней панели открыть папку , как я понял нужно
Код: Выделить всё
WS.Run TotalCmd & " /o /s """ & DirPath & """"
поменять S на R
Код: Выделить всё
WS.Run TotalCmd & " /o /R """ & DirPath & """"
?
Добавлено: Ср апр 26, 2006 09:56
Batya
aldares
Чтобы в соседней панели открыть папку , как я понял нужно поменять S на R?
Не совсем. Нужно оставить ключ S, а перед путем вставить ключ /R=
Код: Выделить всё
WS.Run TotalCmd & " /o /s /r=""" & DirPath & """"