Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

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

 
Post new topic   Reply to topic    Total Commander Forum Index -> Общие вопросы printer-friendly view
View previous topic :: View next topic  
Author Message
aldares



Joined: 28 Dec 2004
Posts: 56

Post (Separately) Posted: Tue Apr 18, 2006 10:51    Post subject: Как создать папку и сразу перейти в нее одной кнопкой? Reply with quote

Была такая тема - про создание папок с именем состоящим из дат и т.д.
http://forum.wincmd.ru/viewtopic.php?t=682&postdays=0&postorder=asc&start=0

LocKtaR-o-DarK wrote:
Господа это можно сделать и без скриптов.
И довольно просто.

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

В строке "Команда" пишем
Code:
cmd /c


В строке "Параметры" пишем
Code:
for /f "tokens=1,2,3,4 delims=. " %%a in ('date /t') do md "%%d%%c-%%b-%%a"


Значок на свое усмотрение, конечно же.

Формат отображения тоже.
Удачи.


Этого всего не нужно нужно просто создать папку
Code:
cmd /c
md description

Можно ли туда же прикрутить команду "cd description"?
Простейшим выходом, наверное, будет написать батник с этими двумя командами и запускать его, но может еще как-то можно извратиться?
Back to top
View user's profile Send private message  
CaptainFlint



Joined: 14 Dec 2004
Posts: 6193
Location: Москва

Post (Separately) Posted: Tue Apr 18, 2006 13:26    Post subject: Reply with quote

Quote:
Можно ли туда же прикрутить команду "cd description"?

Что-то не получается... Вообще говоря, cmd.exe позволяет объединять несколько команд вместе, но в данном случае это не прокатывает: команда cd отрабатывается интерпретатором cmd.exe, он сменяет каталог для себя самого, после чего благополучно завершается, а Тотал так и остаётся в неведении, что кто-то пытался сменить в нём каталог. Похоже, что скрипты - единственный способ, потому как даже BAT- и CMD-файлы выполняются командным интерпретатором, и смена каталога в них не прокатывает.
_________________
Почему же, ё-моё, ты нигде не пишешь "ё"?
Back to top
View user's profile Send private message  
aldares



Joined: 28 Dec 2004
Posts: 56

Post (Separately) Posted: Tue Apr 18, 2006 14:35    Post subject: Reply with quote

Ага, вроде того. Попробую еще извратиться с переменными пути самого тотала типа %P...
Back to top
View user's profile Send private message  
Batya



Joined: 15 Dec 2004
Posts: 2226
Location: Москва, Россия

Post (Separately) Posted: Tue Apr 18, 2006 14:47    Post subject: Reply with quote

В принципе, легко написать для этого vbs-скрипт. Только он будет использовать Script Helper, чтобы заставить TC выполнить команду перехода в папку. Подойдет?
_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message  
aldares



Joined: 28 Dec 2004
Posts: 56

Post (Separately) Posted: Thu Apr 20, 2006 07:13    Post subject: Reply with quote

Пойдет. Если поможете, будет вообще замечательно, я полный ламер в vbs-скриптах.
Back to top
View user's profile Send private message  
Batya



Joined: 15 Dec 2004
Posts: 2226
Location: Москва, Россия

Post (Separately) Posted: Thu Apr 20, 2006 11:15    Post subject: Reply with quote

aldares
Сохрани с расширением vbs. Запускай, как обычный exe-шник. Параметром можно указать название папки. Не забудь установить Script Helper.
Ограничение - если создаваемая папка уже существует, ничего не произойдет.
Code:
'========================================================
' Создание папки и переход в нее в 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
Back to top
View user's profile Send private message  
aldares



Joined: 28 Dec 2004
Posts: 56

Post (Separately) Posted: Thu Apr 20, 2006 12:04    Post subject: Reply with quote

Ха, оно работает, но, при вызове по шоткату из StartMenu появляется стандартное тоталовское окошко New directory, где уже вписано DirName ЗАГЛАВНЫМИ буквами. Как я понял
Code:
TCS.SendKeystroke("{F7}" & DirName & "{ENTER}" & "{ENTER}")
посылает все эти клавиши самому тоталу, а не окошку создания папки.
Сделал
Code:

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

Теперь создает и переходит (наверное, вообще 3 команды надо было, в каждой по энтеру). Осталось победить смену регистра.

Странно: если в меню нажать мышом команду - регистр не меняется, с шотката меняется. Причем, шоткаты у меня буквы - shift+d, shift+s - на разные папки. А со стандартными ctrl+alt+f(х) не работает.
Back to top
View user's profile Send private message  
Batya



Joined: 15 Dec 2004
Posts: 2226
Location: Москва, Россия

Post (Separately) Posted: Thu Apr 20, 2006 13:29    Post subject: Reply with quote

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

Как вариант, вставь паузу (время отпускания Shift-а):
Code:
WScript.Sleep 500
TCS.LockTC True
TCS.SendKeystroke("{F7}" & DirName)
TCS.SendKeystroke("{ENTER}" & "{ENTER}")
TCS.LockTC False

_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message  
aldares



Joined: 28 Dec 2004
Posts: 56

Post (Separately) Posted: Thu Apr 20, 2006 13:54    Post subject: Reply with quote

>>SendKeystroke (SenKeys) вообще очень капризная команда.
Ага, такие спецэффекты возникают...
Пробовал ставить паузу и секунду и 2, не помогает. Равно как и переназначение клавиш на другие, без шифта. Надо как-то строго обозначить переменную dirname, чтобы с ней ничего не делалось...
Back to top
View user's profile Send private message  
Batya



Joined: 15 Dec 2004
Posts: 2226
Location: Москва, Россия

Post (Separately) Posted: Thu Apr 20, 2006 14:49    Post subject: Reply with quote

Хорошо, тогда вернемся к прежнему варианту... Тебя устроит работа скрипта только при включенной английской раскладке?
Back to top
View user's profile Send private message  
aldares



Joined: 28 Dec 2004
Posts: 56

Post (Separately) Posted: Fri Apr 21, 2006 12:38    Post subject: Reply with quote

Устроит. Как правило английская и включена. Мне эта команда нужна для разгребания медиа-контента и конкретно для создания трех папок - description, sub и _misc.
Back to top
View user's profile Send private message  
Batya



Joined: 15 Dec 2004
Posts: 2226
Location: Москва, Россия

Post (Separately) Posted: Fri Apr 21, 2006 13:50    Post subject: Reply with quote

Сделал через вызов TotalCmd.exe с параметрами. У этого способа пока не увидел вообще никаких недостатков.
Теперь сделал, что если создаваемая папка уже существует, ошибки не будет - переходим в эту папку.
Code:
'========================================================
' Создание папки и переход в нее в 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


ЗЫ. Кстати, при таком способе можно управлять не только активной панелью. Например, можно открыть созданную папку в противоположной панели.
Back to top
View user's profile Send private message  
aldares



Joined: 28 Dec 2004
Posts: 56

Post (Separately) Posted: Wed Apr 26, 2006 06:19    Post subject: Reply with quote

Забавно. НО, главное, работает! Спасибо!
Чтобы в соседней панели открыть папку , как я понял нужно
Code:
WS.Run TotalCmd & " /o /s """ & DirPath & """"

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

?
Back to top
View user's profile Send private message  
Batya



Joined: 15 Dec 2004
Posts: 2226
Location: Москва, Россия

Post (Separately) Posted: Wed Apr 26, 2006 09:56    Post subject: Reply with quote

aldares
Quote:
Чтобы в соседней панели открыть папку , как я понял нужно поменять S на R?

Не совсем. Нужно оставить ключ S, а перед путем вставить ключ /R=
Code:
WS.Run TotalCmd & " /o /s /r=""" & DirPath & """"

_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message  
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Общие вопросы All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group