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

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

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

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

Сообщение Lari »

2DrShark

Не смотря на то, что CmdLine=1, приведенный код

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

WshShell.SendKeys "{RIGHT}" 
WshShell.SendKeys "cd папка_которую нужно открыть" 
WshShell.SendKeys "{ENTER}"
открывает последний файл в панели, а не указанную папку? Так как переход в командную строку по нажатию на "->" происходит только в режиме детальной информации в панели, при отображении только имен папок курсор пепемещается на последний файл.

А при выполнении, например, WshShell.SendKeys "cd c:\games" в командной строке отображается: 34 с:\71-5? и побуквенный ввод с помощью SendKey дает тот же результат? Не пойму в чем ошибка :(
DrShark
Сообщения: 911
Зарегистрирован: Сб окт 21, 2006 20:27
Откуда: Kyiv, Ukraine
Контактная информация:

Сообщение DrShark »

Попробуй с использованием буфера обмена:

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

Dim WshShell
Set WshShell = CreateObject ("Wscript.Shell")
WshShell.SendKeys "{F7}"
WshShell.SendKeys "c:\games\"
WshShell.SendKeys "+{HOME}"
WshShell.SendKeys ("^C")
WScript.Sleep 500
WshShell.SendKeys "{ENTER}"
WshShell.SendKeys "{PGUP}"
WshShell.SendKeys "+{F6}"
WshShell.SendKeys "^V"
WshShell.SendKeys "{ENTER}"
Только это не будет работать, если название папки кириллическое.
Lari
Сообщения: 30
Зарегистрирован: Пн мар 12, 2007 10:52

Сообщение Lari »

Результат вообщем-то тот же. В поле ввода имени папки (F7) вместо c:\games\ вводиться 3^\71-5 и как результат создается две папки 3^ и в ней 71-5 :)

а вот этого вообще не понял:

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

WshShell.SendKeys "{PGUP}" 
WshShell.SendKeys "+{F6}" 
WshShell.SendKeys "^V" 
DrShark
Сообщения: 911
Зарегистрирован: Сб окт 21, 2006 20:27
Откуда: Kyiv, Ukraine
Контактная информация:

Сообщение DrShark »

Lari писал(а):Результат вообщем-то тот же. В поле ввода имени папки (F7) вместо c:\games\ вводиться 3^\71-5 и как результат создается две папки 3^ и в ней 71-5
Что же, здесь я ничем помочь не могу... Попробуй на AutoIt подобный код выполнить, только там он проще будет -

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

Dim WshShell 
Set WshShell = CreateObject ("Wscript.Shell")
выбрасывай, вместо WshShell.SendKeys "{somekey}" используй Send ("{somekey}"), а часть WScript.Sleep n меняй на Sleep (n) или выбрасывай.
а вот этого вообще не понял:
Это переход к "папке" ".." и нажатие Shift+F6 - так активируется элемент текущего пути, т.е. адресная строка.
Аватара пользователя
Volniy
Сообщения: 585
Зарегистрирован: Ср дек 15, 2004 00:17
Откуда: Местный

Сообщение Volniy »

Lari писал(а):НО еще плюс к этому нужно зайти в эту папку.
Пробуй такой вариант (исправлено на основе идеи Batya)

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

'=========================[ Start of file ]========================= 
Option Explicit 

Dim CurPath, NewFolder, CurFile, FileName, NPath, TempFile, SelFile
Dim WSH, FSO 
Set WSH = CreateObject ("Wscript.Shell") 
Set FSO = CreateObject("Scripting.FileSystemObject") 

CurPath = WScript.Arguments(0)   '"%P"
NewFolder = WScript.Arguments(1) '"%O"
CurFile = WScript.Arguments(2)   '"%L"
FileName = WScript.Arguments(3)  '"%N"

If UCase(NewFolder) = UCase(FileName) Then 
   WScript.Quit() 
End If 

NPath = CurPath & NewFolder 

If Not FSO.FolderExists(NPath) Then
   FSO.CreateFolder NPath
End If

If FSO.FolderExists(NPath) Then
  Set TempFile = FSO.OpenTextFile(CurFile, 1) 
   Do While Not TempFile.AtEndOfStream 
     Set SelFile = FSO.GetFile(TempFile.ReadLine) 
     If Not FSO.FileExists (NPath & "" & SelFile.Name) Then 
        FSO.MoveFile SelFile.Path , NPath & "" & SelFile.Name 
     End If 
  Loop 
  WSH.Run """" & "%COMMANDER_PATH%\totalcmd.exe""" _
          & " /O /S /L=""" & NPath & """", 8, False
End If


WScript.Quit() 
'=========================[  End of file  ]=========================
Последний раз редактировалось Volniy Чт янв 10, 2008 21:36, всего редактировалось 1 раз.
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

:)
Ребята, вы не перегрелись? Зачем изобретать велосипед?
Чем не устраивает

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

Dim WSH
Set WSH = CreateObject ("Wscript.Shell") 
WSH.Run "%COMMANDER_PATH%\totalcmd.exe /O /S /L=""" & NPath & """", 7, True 
Нет, я не сплю. Я просто медленно моргаю.
Аватара пользователя
Volniy
Сообщения: 585
Зарегистрирован: Ср дек 15, 2004 00:17
Откуда: Местный

Сообщение Volniy »

Batya писал(а)::)
Ребята, вы не перегрелись? Зачем изобретать велосипед?
Чем не устраивает
Вполне устраивает, только подглючивает ежели есть пробелы в пути к Тоталу.

А ты где раньше был? Пиво пил? (с) :lol:

ОК, исправил свой пост выше (имхо: бестолковый скрипт...)
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

Volniy писал(а):Вполне устраивает, только подглючивает ежели есть пробелы в пути к Тоталу.
А какие тут могут быть проблемы? Скрипт ведь из под TC запускается.
Volniy писал(а):А ты где раньше был? Пиво пил? (с)
Эх, если бы :roll:
Замотался на работе. Даже в инет зайти некогда.

Кстати, что-то меня наводит на мысль, что исходным скриптом с учетом
Lari писал(а):поэтому взял какой-то пример и написал то, что хотел.
мог быть вот этот.
Нет, я не сплю. Я просто медленно моргаю.
Lari
Сообщения: 30
Зарегистрирован: Пн мар 12, 2007 10:52

Сообщение Lari »

О спасибо! :)
Теперь все работает!
Batya писал(а):Кстати, что-то меня наводит на мысль, что исходным скриптом с учетом
Lari писал(а):поэтому взял какой-то пример и написал то, что хотел.
мог быть вот этот.
нет другой... в этом то задача решена по созданию папки, смысл его переписывать.
Аватара пользователя
Volniy
Сообщения: 585
Зарегистрирован: Ср дек 15, 2004 00:17
Откуда: Местный

Сообщение Volniy »

Batya писал(а):А какие тут могут быть проблемы? Скрипт ведь из под TC запускается.
А причем тут это? Если в пути/имени запускаемого на выполнение файла будет пробел и не будет дополнительных кавычек, тогда именем файла реально считается только то, что лежит до первого пробела, а все остальное параметрами командной строки. Скрипт выдавал ошибку "Система не ожет найти указаный файл". Просто проверь и убедишься сам.
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

Volniy
Ну хорошо, а так?

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

WSH.Run """%COMMANDER_PATH%\totalcmd.exe"" /O /S /L=""" & NPath & """", 7, True 
Нет, я не сплю. Я просто медленно моргаю.
Аватара пользователя
Volniy
Сообщения: 585
Зарегистрирован: Ср дек 15, 2004 00:17
Откуда: Местный

Сообщение Volniy »

Batya писал(а):Ну хорошо, а так?
Не, ты тогда точно что-то пил :wink: Я ведь сразу код исправил. Не заметил?
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

Volniy
:) Ну не смотрел я в твой код :roll:
Тогда все должно работать без проблем.
При каких путях у тебя не работает (конкретный пример)?

И непонятно, зачем лишние символы в начале WSH.Run?

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

"""" & "...
Нет, я не сплю. Я просто медленно моргаю.
Аватара пользователя
Volniy
Сообщения: 585
Зарегистрирован: Ср дек 15, 2004 00:17
Откуда: Местный

Сообщение Volniy »

Batya писал(а):При каких путях у тебя не работает (конкретный пример)?
c:\Program Files\wincmd
Batya писал(а):И непонятно, зачем лишние символы в начале WSH.Run?

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

"""" & "...
Это и есть те кавычки (это открывающая кавычка), о которых я тебе и говорю. Я специально наглядно это написал, вместо твоего варианта

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

WSH.Run """%COMMANDER_PATH%...
а на самом деле это одно и то же.
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

Volniy писал(а):а на самом деле это одно и то же.
Это я знаю, поэтому и спросил, зачем ты написал лишнее, но теперь понятно:
Volniy писал(а):наглядно
Volniy писал(а):c:\Program Files\wincmd
Все прекрасно работает. Ты, случайно, не забыл параметры кнопки указать в кавычках?

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

"%P" "%O" %L "%N"
Нет, я не сплю. Я просто медленно моргаю.
Ответить