Страница 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"
Значок на свое усмотрение, конечно же.

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

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

cmd /c
md description
Можно ли туда же прикрутить команду "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 & """"