Автоматический переход в папку при ее создании

Обсуждение вопросов автоматизации Total Commander с помощью сторонних программ и скриптовых технологий.

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

Lari
Сообщения: 30
Зарегистрирован: Пн мар 12, 2007 10:52

Автоматический переход в папку при ее создании

Сообщение Lari »

Здравствуйте!
Имеется vb скрипт для кнопки на панели инструментов, который создает папку с именем файла под курсором и перемещает в нее этот файл.
Подскажите пожалуйста как нужно его дополнить, чтобы при нажатии на кнопку на панели инструментов при нажатой клавише Shift автоматически перейти во вновь созданную папку.
Аватара пользователя
Volniy
Сообщения: 585
Зарегистрирован: Ср дек 15, 2004 00:17
Откуда: Местный

Сообщение Volniy »

Нажатие Shift средствами VBS не обработать. Если хочешь сразу войти в эту папку, тогда добавь где-то в конце скрипта

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

Dim WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.SendKeys "{ENTER}"
ЗЫ Сам не проверял, так ведь и скрипта-то твоего я тут не вижу :wink:
Lari
Сообщения: 30
Зарегистрирован: Пн мар 12, 2007 10:52

Сообщение Lari »

скрипт собственно вот

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

Dim NewFolder, CurFile, FileName, CurPath, NPath, FSO, TempFile, SelFile
CurPath = WScript.Arguments(0)   '%P
NewFolder = WScript.Arguments(1) '%O
CurFile = WScript.Arguments(2)   '%L
FileName = WScript.Arguments(3)  '%N

If NewFolder = FileName then 
   WScript.Quit()
End If

NPath = CurPath + NewFolder
Set FSO = CreateObject("Scripting.FileSystemObject")

If Not FSO.FolderExists(NPath) then
   FSO.CreateFolder(NPath)
End If
Set TempFile = FSO.OpenTextFile(CurFile, 1)
Do While Not TempFile.AtEndOfStream
Set SelFile = FSO.GetFile(TempFile.ReadLine)
Loop

If Not FSO.FileExists (NPath & "\" & FileName) then
   FSO.MoveFile SelFile, NPath & "\" & FileName
End If
WScript.Quit()
но вариант с WshShell.SendKeys "{ENTER}" не подходит, так как курсор находится не на новой папке, которую нужно открыть.
Может есть другое решение?

В идеале хотелось бы, чтобы скрипт работал в двух вариантах:
1. перемещал файл в папку, при нажатии на кнопку на панели инструметов
2. перемещал файл в папку и открывал ее, принажатии на кнопку на панели инструментов и удерживаемой клавише Shift.
Аватара пользователя
Вахмурка
Сообщения: 2587
Зарегистрирован: Пн дек 27, 2004 14:47
Откуда: Большая деревня Москва
Контактная информация:

Сообщение Вахмурка »

Нажатие Shift средствами VBS не обработать
А PowerPro - будьте любезны. Например, вот так.
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Аватара пользователя
Volniy
Сообщения: 585
Зарегистрирован: Ср дек 15, 2004 00:17
Откуда: Местный

Сообщение Volniy »

Вахмурка писал(а):Например, вот так.
Стар я стал, видать вижу плохо :) И где там по ссылке про перехват нажатия кнопки на Тоталовской панели с зажатым шифтом?

2 Lari
Извини, но со скриптом у тя чой-та не таво. Зачем вот тут

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

Set TempFile = FSO.OpenTextFile(CurFile, 1) 
Do While Not TempFile.AtEndOfStream 
Set SelFile = FSO.GetFile(TempFile.ReadLine) 
Loop
перебираются все выделенные файлы, если только с последним в списке производится следующая далее операция перемещения?

Какой по идее должен быть алгоритм, когда выделено несколько файлов?
Последний раз редактировалось Volniy Вт янв 08, 2008 01:52, всего редактировалось 1 раз.
Аватара пользователя
Вахмурка
Сообщения: 2587
Зарегистрирован: Пн дек 27, 2004 14:47
Откуда: Большая деревня Москва
Контактная информация:

Сообщение Вахмурка »

Да вы, батенька, педант. Ну, не Shift, а Ctrl - разве это важно?!

По делу. Все сводится вот к чему:

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

if(ctrl)
	Move = 1
ctrl - это функция, возвращающая "истину", если Ctrl нажат. Есть аналогичная функция shift. А параметр Move ("истина" - уничтожить старый комментарий, "ложь" - сохранить) может быть передан скрипту в явной форме.
Что же до "Тоталовской панели", то нажатие клавиши отслеживается просто в момент отработки оператора. Как именно запущен на выполнение скрипт - абсолютно фиолетово.
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Аватара пользователя
Volniy
Сообщения: 585
Зарегистрирован: Ср дек 15, 2004 00:17
Откуда: Местный

Сообщение Volniy »

Вахмурка писал(а):...нажатие клавиши отслеживается просто в момент отработки оператора. Как именно запущен на выполнение скрипт - абсолютно фиолетово.
Понятно. Наверное, тогда и я в своем хелпере такую же х**ню могу организовать через ту же GetKeyboardState. Если, конечно, найду его (хелпера) исходники...

PS Ты со словом педант немного поосторожней. Начало этого слова как-то напрягает :wink:
Аватара пользователя
Вахмурка
Сообщения: 2587
Зарегистрирован: Пн дек 27, 2004 14:47
Откуда: Большая деревня Москва
Контактная информация:

Сообщение Вахмурка »

А также педаль, педикюр, педиатр, педагог...

Кстати, а не закинуть ли Гислеру пожелание: При нажатии Shift+F7 не только создавать директорию, но и входить в нее. В кодах это - две строки.
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
DrShark
Сообщения: 911
Зарегистрирован: Сб окт 21, 2006 20:27
Откуда: Kyiv, Ukraine
Контактная информация:

Сообщение DrShark »

Вахмурка писал(а):Кстати, а не закинуть ли Гислеру пожелание: При нажатии Shift+F7 не только создавать директорию, но и входить в нее. В кодах это - две строки.
Закинуть можно. Давай определимся, как ТК должен вести себя при создании нескольких папок способами, упоминавшимися, например, здесь или здесь. Вход должен выполнятся в первую папку из перечисленных?
Кстати, интересно, что бы мог означать пост
Valentino писал(а):And with command [F7] "..\D\..\E\..\F" while being in "C:" you can create some additional hard disks if your C drive is out of space... So no need to buy additional HDDs anymore! Cool...
Это метафора такая?
Вообще, подобный способ "создания" дисков мог бы послужить фронтэндом для команды subst.
Lari
Сообщения: 30
Зарегистрирован: Пн мар 12, 2007 10:52

Сообщение Lari »

Славненько... м-да

2Volniy

по поводу

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

Set TempFile = FSO.OpenTextFile(CurFile, 1) 
Do While Not TempFile.AtEndOfStream 
Set SelFile = FSO.GetFile(TempFile.ReadLine) 
Loop
и правда не совсем корректно... но в написании vbs не силен, поэтому взял какой-то пример и написал то, что хотел. Буду рад, если поправите :)

2ALL
Каким образом зайти в созданную папку по скрипту??? Без нажатия дополнительных клавиш.
Аватара пользователя
Вахмурка
Сообщения: 2587
Зарегистрирован: Пн дек 27, 2004 14:47
Откуда: Большая деревня Москва
Контактная информация:

Сообщение Вахмурка »

Каким образом зайти в созданную папку по скрипту??? Без нажатия дополнительных клавиш.
Открой TOTALCMD.INC и найди команды:

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

cm_Return
cm_GoToDir
Кроме того, следует поразмышлять о "досовской" команде cd и ее вариациях (скажем, появившаяся в "семерке" команда CD с параметром)
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Аватара пользователя
Volniy
Сообщения: 585
Зарегистрирован: Ср дек 15, 2004 00:17
Откуда: Местный

Сообщение Volniy »

2 Вахмурка
Команды эти в VBS может передавать только с помощью моего хелпера.
Lari писал(а):Буду рад, если поправите :)
И поправлю :D . Только, я повторяюсь, опиши подробно требуемый алгоритм работы скрипта (особенно интересует вариант когда выделен не один файл а несколько).
Предполагаю: создается папка с именем файла под курсором и все выделенные файлы в нее перемещаются. Так?
Lari
Сообщения: 30
Зарегистрирован: Пн мар 12, 2007 10:52

Сообщение Lari »

Вообще-то команда cm_GoToDir на сколько я понял работает непосредственно с директорией находящейся под курсором.
Получается не подходит, т.к. после создания папки скриптом курсор на нее не устанавливается. Вот если бы создавать папку командой cm_mkDir без диалога ввода имени, то cm_GoToDir была бы самое то.

И еще можно ли средствами vbs написать в командной строке что-то типа:
cd C:\...\папка_которую нужно открыть ? если да то какаим образом.
Lari
Сообщения: 30
Зарегистрирован: Пн мар 12, 2007 10:52

Сообщение Lari »

Volniy писал(а):Предполагаю: создается папка с именем файла под курсором и все выделенные файлы в нее перемещаются. Так?
так НО еще плюс к этому нужно зайти в эту папку.
DrShark
Сообщения: 911
Зарегистрирован: Сб окт 21, 2006 20:27
Откуда: Kyiv, Ukraine
Контактная информация:

Сообщение DrShark »

Lari писал(а):И еще можно ли средствами vbs написать в командной строке что-то типа:
cd C:\...\папка_которую нужно открыть ? если да то какаим образом.
При условии, что TC включена командная строка,
[Layout]
CmdLine=1
можно так:

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

WshShell.SendKeys "{RIGHT}"
WshShell.SendKeys "cd папка_которую нужно открыть"
WshShell.SendKeys "{ENTER}"
Ответить