Установка cmd с командой по умолчанию и определенным пользователем сообщением

1552
gpuguy

При нажатии кнопки в приложении winform я выполняю файл cmd.exe (с использованием system ("cmd.exe");), который открывается совершенно нормально и отображает следующее:

 Microsoft Windows XP [Version 6.1.7601] (C) Copyright 1985-2001 Microsoft Corp.  C: A\Documents\Visual Studio 2010\Projects\WinformTest\WinformTest>  

То, что я хочу, это когда пользователь нажимает кнопку, cmd.exe открывается с командой по умолчанию и сообщение, подобное этому:

 Please change command options and press enter to get started experimenting  C: A\Documents\Visual Studio 2010\Projects\WinformTest\WinformTest> reduction -x 33554432 -i  

Обратите внимание на новую команду, и сообщение уже там.

Кто-нибудь может сказать мне, как пойти на это?

ОБНОВИТЬ

 cmd /k echo Please change command options and press enter to get started  experimenting & echo reduction -x 33554432 -i 

Это показывает самое близкое решение, но здесь я должен устанавливать команды каждый раз, когда открываю cmd. Можно ли установить команду один раз и сохранить настройку, поэтому при следующем открытии CMD появится сообщение? Или можно передать эти команды параметрам / переключателям, когда я открываю их в своем приложении с помощью системы («cmd.exe»), чтобы во время выполнения этот параметр для сообщения был установлен?

решаемая

 system("cmd.exe /k echo Please change command options and press enter to get started  experimenting & echo reduction -x 33554432 -i" ); 

Но это перекликается с Maeesage, но команда не приходит в командной строке.

1

2 ответа на вопрос

3
Julian Knight

One way to do this is to make use of the little known autorun feature of the command processor. I remembered that this was possible so did a Google search only to be given a link to my own Blog! I'd forgotten about writing this:

http://it.knightnet.org.uk/2009/05/how-to-show-a-message-of-the-day-motd-at-the-windows-command-prompt.html

You can set an autorun command via the registry at either of these locations according to need:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor HKEY_CURRENT_USER\SOFTWARE\Microsoft\Command Processor 

I use the following setting:

%USERPROFILE%\.profile.cmd 

Which runs that cmd file every time I start a command line. In the autorun command you could simply display the output of a text file. In your app, dump some text to the text file, start the command line. You should then empty the text file (don't delete it) so you don't keep getting the prompt.

You could add some further intelligence if needed so that the text file is only displayed for your app.

Of course, you could also change the registry on the fly from your app.

2
martineau

cmd.exe accepts an optional /k parameter, which you could use to have it execute a command when it starts up. To use this to get something close to what you want, something like the following seems close:

cmd /k echo Please change command options and press enter to get started experimenting & echo reduction -x 33554432 -i 

which results in a window opening and displaying:

enter image description here

As you can see, you can execute multiple commands by putting an "&" between each.

If what you want to do something more complex you can have it execute a separate .cmd/.bat script to achieve something similar to what Julian Knight talks about in his answer, but without requiring registry modifications.

Но здесь я должен устанавливать команды каждый раз, когда открываю cmd. Можно ли установить команду один раз и сохранить настройку, поэтому при следующем открытии CMD появится сообщение? Или можно передать эти команды переключателям, когда я открываю их в своем приложении с помощью системы («cmd.exe»), чтобы во время выполнения была выполнена настройка сообщения? gpuguy 11 лет назад 0
This worked: system("cmd.exe /k echo Please change command options and press enter to get started experimenting & echo reduction -x 33554432 -i" ); gpuguy 11 лет назад 0
@gpuguy: Ваш комментарий о том, что это сработало, был тем, что я предлагал вам сделать в моем ответе - извините, потому что, очевидно, это было недостаточно ясно. martineau 11 лет назад 0
извините за путаницу gpuguy 11 лет назад 0
@qpuguy: Вы можете использовать [`SendKeys ()`] (http://msdn.microsoft.com/en-us/library/system.windows.forms.sendkeys.aspx) для предварительной загрузки буфера клавиатуры cmd. martineau 11 лет назад 0