Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Не выполняется команда из командной строки


Автор: Cyri 28.2.2005, 12:08
Люди, подскажите. Не выполняется команда
WinExec(PChar('grep.exe>f.txt'),SW_SHOWNORMAL). Никаких ошибок или чего-то ещё, но файл не создаётся и всё. Самое интересное, что если просто grep.exe (или любая досовская команда) то всё хорошо. Я пршёл к выводу, что делфи не устраивает символ '>'. Пробовал даже его код вводить (chr(62)), но ничего не выходит. Кстати и команда ShellExecute(Handle,nil,PChar('grep.exe>f.txt'),nil,nil,SW_SHOW) тоже не работает. Причём пробовал разную командную строку, но символ '>' всегда всё портит. Какой выход?
Кирилл

Автор: Александра 28.2.2005, 12:26
Cyri

делай так:
Код
WinExec('cmd /C "grep.exe" > c:\1.txt', sw_shownormal);

Автор: Snowy 28.2.2005, 12:52
формат file.exe>file.txt
Это указание интерпретатору коммандной строки перенаправлять стандартный вывод в файл.
Для этого коммандный интерпретатор должен выполняться. Сам file.exe этого не сделает, если только у него это не заложено.
Причем имя интерпретатора нужно брать из переменной окружения %COMSPEC%, поскольку он различен для разных версий Windows. (command.com и cmd.exe).
В остальном все верно - ключ /C одинаков для обоих.

Автор: Cyri 28.2.2005, 14:51
Всё! У меня получилось. Всем спасибо. Прежде чем закрыть тему, объясните здесь же в двух словах смысл ключа /С.
Кирилл

Автор: Александра 28.2.2005, 14:53
Cyri
ключ /C заставляет выполнить переданную команду и закрыть окошко, замени на /K и у тебя окно останется

Автор: Vit 28.2.2005, 18:02
Хорошо бы ещё версию винды проверять, если 95, 98, ME то надо не cmd а Command вызывать...

Автор: Alex 28.2.2005, 18:30
Цитата(Vit @ 28.2.2005, 18:02)
Хорошо бы ещё версию винды проверять, если 95, 98, ME то надо не cmd а Command вызывать...

Или вызвать:
Код

// В переменную CmdProcessor заношу путь к файлу командного интерпретатора
 GetEnvironmentVariable('COMSPEC',@CmdProcessor,sizeof(CmdProcessor));

Автор: Romtek 28.2.2005, 22:39
Я бы попытался так:
Код
ShellExecute(Handle {0}, 'open', 'grep.exe', '>f.txt', nil, SW_SHOWNORMAL)

Дело в том, что в 3-м параметре надо указывать имя запускаемого файла, а параметры - отдельно, в 4-м.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)