Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Закладки » Как вызвать консоль из контекстного меню файла, WinXP

Модерирует : KLASS, IFkO

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

abz



Хулиган
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Мне нужно создать строку в контекстном меню любого файла, вызываемого по правой кнопке мыши, следующего действия (часть этой задачи уже решил, но остался главный вопрос):
 
   
 
и чтобы при выборе пункта CMD была открыта консоль таким образом:
 
   
 
Я создал reg-файл следующего содержания:

Код:
Windows Registry Editor Version 5.00
 
[HKEY_CLASSES_ROOT\*\shell]
 
[HKEY_CLASSES_ROOT\*\shell\view]
@="& CMD"
 
[HKEY_CLASSES_ROOT\*\shell\view\command]
@="cmd.exe /k echo \"%1\""

Но получил не совсем то, что хотел, а вот это:
 
   
 
Проблема в строке:

Код:
cmd.exe /k echo "%1"

 
Вопрос: какую надо написать строку, чтобы получить то, что я хотел?
 
P.S. Операционка WinXP




Нужно писать название ОС в _названии_ темы (п. 2.3 правил). Исправлено. lynx.

Всего записей: 14975 | Зарегистр. 04-11-2002 | Отправлено: 12:17 23-12-2004 | Исправлено: lynx, 18:59 23-12-2004
abz



Хулиган
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
abz
11:17 23-12-2004
Цитата:
Нужно писать название ОС в _названии_ темы (п. 2.3 правил). Исправлено. lynx.

Это работает в любой NT системе, а также, при небольшом изменении и в остальных Win! Поэтому указывать в названии ОС не стал.
 
Вот решение (спасибо KLASS и carrotik):

Цитата:
...пишем скриптик:
 
Set WshShell = WScript.CreateObject("WScript.Shell")
Set FS = CreateObject("Scripting.FileSystemObject")
Set File = FS.GetFile(WScript.Arguments(0))
sPath = FS.GetParentFolderName(File)
intReturn = WshShell.Run("cmd /k cd " & sPath)
WScript.Sleep 1000
WshShell.Sendkeys File.Name
'For i = 1 To Len(File.Name)
'WshShell.Sendkeys "{LEFT}"
'Next
'WshShell.Sendkeys " {LEFT}"
 
...называем его, к примеру c:\cmdkeys.vbs .... а в реестре, соответственно:
 
 
код:
--------------------------------------------------------------------------------
 
[HKEY_CLASSES_ROOT\*\shell\Command\command]  
@="wscript c:\cmdkeys.vbs \"%1\""

Подробнее здесь.

Всего записей: 14975 | Зарегистр. 04-11-2002 | Отправлено: 04:26 25-12-2004 | Исправлено: abz, 04:29 25-12-2004
KLASS



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
abz
В итоге получилось следущее, создаешь скрипт бла-бла.vbs

Код:
 
Set WshShell = WScript.CreateObject("WScript.Shell")
Set FS = CreateObject("Scripting.FileSystemObject")
Set File = FS.GetFile(WScript.Arguments(0))
sPath = FS.GetParentFolderName(File)
intReturn = WshShell.Run("cmd /k cd " & sPath)
WScript.Sleep 250
WshShell.Sendkeys Chr(34) & File.Name & Chr(34)
 

Обрати внимание на задержку WScript.Sleep 250, так имя файла быстрее вставляется, если будут траблы увеличивай кол-во миллисекунд. И регфайл

Код:
 
REGEDIT4
 
[HKEY_CLASSES_ROOT\*\shell\Command]
@="CMD"
 
[HKEY_CLASSES_ROOT\*\shell\Command\command]
@="WScript здесь_прописываешь_путь_c_короткими_именами_к_бла-бла.vbs \"%1\""
к примеру
@="WScript C:\\Docume~1\\!\\MyDocu~1\\!Scripts\\CMD\\cmdkeys.vbs \"%1\""
 
 

У carrotik, его же скрипт, не стал работать с длинными именами файлов (у меня заработал), он предложил  следующий выход, может кому понадобится:
Сначала создал батник, бла-бла.cmd а в нем одна строка
Wscript путь_к_скрипту_бла-бла.vbs %1
а в реестре прописал
Путь_к_батнику_бла-бла.cmd "%1"
С русскими именами, как я понял, все дело в кодировках с которыми работает скрипт и ком. строка, т.е. кодировки разные VBS-1251, а CMD-866, вот русские буковки и обрезаются. Я в этом мало сооброжаю, если тебе это важно, то задай вопрос на хоботе.

----------
Process Explorer RU
Process Monitor RU
Process Hacker RU

Всего записей: 11539 | Зарегистр. 12-10-2001 | Отправлено: 11:46 25-12-2004 | Исправлено: KLASS, 09:38 26-12-2004
popkov

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
KLASS

Цитата:
intReturn = WshShell.Run("cmd /k cd " & sPath)  

Лучше, кстати, эту строку видоизменить так:

Цитата:
intReturn = WshShell.Run("%windir%\system32\cmd.exe /k cd " & sPath)  

Иначе с исполнимыми (и скриптовыми) файлами с именами CMD работать всё это не будет.
 
Но, к сожалению, с файлами, содержащими русские буквы, вся эта премудрость работать не хочет ни в какиую: русские буквы просто удаляются, и не отправляются уже открытому окну командной строки...

Всего записей: 1849 | Зарегистр. 22-03-2003 | Отправлено: 12:07 20-04-2005
KLASS



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
с файлами, содержащими русские буквы, вся эта премудрость работать не хочет ни в какиую

Думаю и это возможно. Надо только знать, как в скрипт засунуть подставку имени файла в Unicode, тогда и русские будет хавать. Обратись к спецам по скриптам или поройся у мелких в Скриптовом центре http://www.microsoft.com/technet/scriptcenter/default.mspx

Всего записей: 11539 | Зарегистр. 12-10-2001 | Отправлено: 16:19 20-04-2005
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Закладки » Как вызвать консоль из контекстного меню файла, WinXP


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2025

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru