Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Командная строка Windows и её разбор

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
Loonie



Зарегистрирован: 22.07.2003
Сообщения: 1

СообщениеДобавлено: Вт Июл 22 2003 11:47    Заголовок сообщения: Командная строка Windows и её разбор Ответить с цитатой

Имеется командная строка абсолютно любого вида. Необходимо показать иконку её файла (с показом проблем не возникает). Господа, возникает огромный вопрос, как правильно разобрать строку в этом случае на параметры и путь к этому файлу, если строка вида 'calc First Second "Third parameter" '. Т. е. мне необходимо получить путь к файлу c:\windows\calc.exe. Помогите, никто на других форумах не может ответить на этот вопрос. Есть ли стандартные средства для решения этой задачи? Просьба, CreateProcess, FindExecutable не предлагать, т. к. они работают только с исполняемыми файлами (причем FindExecutable - с неассоциируемыми не работает). Также следует сказать, что мне не нужны советы относительно взятия командной строки текущего запущенного приложения с помощью GetCommandLine; представьте, что строка вводится в Edit. Если примером будет 'c:\windows\calc2', где calc2 - файл без расширения в директории windows - они не работают. Какие расширения проверяются, если оного не указано? Как правильно обрабатывать кавычки, которые считаются объединителями?
За образец работы с командными строками предлагаю брать стандартный диалог Пуск->Выполнить.
Вы, конечно, можете предложить сделать все вручную, но тогда возникает вопрос, а как разделить Path Environment Variable на отдельные директории? Это только в идеальном случае там директории разделены знаком ; А если полный путь к директории не указан? А если...?

Вопросов много. Пожалуста, помогите. На вопрос действительно не смог пока толково ответить никто.

Для тех, кто думает, что все так просто, пример 'C:\Program Files\Outlook Express\Msimn.exe First Second' в вышеупомянутом Пуск->Выполнить не работает.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Aist++
Гость





СообщениеДобавлено: Вт Июл 22 2003 14:13    Заголовок сообщения: Всё просто! Ответить с цитатой

1) Определяешь, на какой файл ссылаеться командная строка. Для этого:
1.1) Если строка начинаеться с кавычки, то ищешь в строке следующую кавычку. Теперь предполагаем, что строка между этими кавычками и есть запускаемый файл, остальное параметры.
1.2) Если строка начинаеться с любого другого символа, то ищешь первый пробел в строке. Запускаемый файл - от начала строки до этого пробела.

2) Копируем его в новую строку так, чтобы строка содержала запускаемый файл

3) Теперь мы должны выполнить поиск соответствующего файла в текущем каталоге. Для этого:
3.1) Выполнить поиск по той строке, которую мы только что получили
3.2) Если не найдено, повторить но с расширением .exe
3.3) Если не найдено, повторить но с расширением .сом
3.4) Если не найдено, повторить но с расширением .bat
4) Если файл так и не найден, то выполнить поиск в каталогах, указанных в PATH. Для этого
4.1) Если PATH начинаеться с кавычки, искать следующую кавычку. Между ними и будет имя каталога
4.2) Если с другого символа, то ищешь ";"
4.3) Выполняешь поиск, как в пунктах 3.1-3.4

Вроде всё, если что, обращайся. Может я вопрос не правильно понял. Но расскажу что знаю!
Вернуться к началу
Борис
Гость





СообщениеДобавлено: Вт Июл 22 2003 15:33    Заголовок сообщения: Re: Командная строка Windows и её разбор Ответить с цитатой

1. Ищешь первый "\", начиная с конца строки. Если есть, запоминаешь номер символа (пусть будет num), иначе ищешь первый ":" начиная с конца строки. Если есть, запоминаешь номер символа (пусть опять будет num), иначе num=0. Подстрока с 1-го символа по num-ый -- путь. Если путь начинается с кавычек, их можно убрать. (Назовём cPath.) Подстрока с (num+1)-го символа до конца строки -- файл с аргументами. (Назовём cCmd.)

2.1. В cCmd ищем ".exe", начиная с начала. Если найдено, запоминаем номер символа "." (пусть будет no), иначе ищем ".dll". Если найдено, запоминаем номер символа "." (пусть опять будет no), иначе ищем... Так проверяем все интересующие расширения. (Иконки только в .exe и .dll, но в общем случае, нужно проверять ".com", ".bat", ".cmd", ".ocx" и т. д., то есть то, что в конкретной винде является исполняемым файлом.) Если найдено, то подстрока cCmd с 1-го символа по (no+3)-ый -- имя файла (назовём cFile), иначе no=0.

2.2. Если no==0 в cCmd ищем пробел, начиная с начала. Если найдено, запоминаем номер (пусть опять будет no), иначе ищем табуляцию, начиная с начала. Если найдено, запоминаем номер (пусть опять будет no). Если найдено, то подстрока cCmd с 1-го символа по (no-1)-ый+".exe" -- имя файла (назовём cFile), иначе no=0.

3. Если no==0, то неправильная команда, иначе cPath+cFile -- требуемое полное имя файла.

Кажется, всё.
Вернуться к началу
Борис
Гость





СообщениеДобавлено: Вт Июл 22 2003 15:48    Заголовок сообщения: Нет, не все. Ответить с цитатой

Моим способом ищешь имя файла и путь. Если путь оказывается пустым, а файл исполняемым (не длл-кой), то способом Aist++ 22-07-2003 15:13 проходишь по путям в переменной path в поисках этого файла. Если путь содержит только диск, то находишь текущий каталог на этом диске и -- диск+текущий каталог+файл == искомый файл. Иначе путь задан. Далее. Если путь начинается не с диска, но с "\", то находишь текущий диск и -- текущий диск+путь+файл == искомый файл. Если путь начинается не с диска и не с "\", то находишь текущий каталог и текущий диск и -- текущий диск+текущий каталог+путь+файл == искомый файл.

Теперь всё.
Вернуться к началу
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...