Автоматическое выполнение команд при открытии командной строки

21

Я ищу способ автоматического выполнения некоторых консольных команд при открытии командной строки в Windows, в частности, для установки псевдонимов некоторых команд.

Например, когда открыта командная строка, я хочу, чтобы автоматически выполнялась команда, подобная следующей, чтобы я мог использовать lsвместо dir.

doskey ls=dir

Как это может быть сделано?

Дэниел Уильямс
источник
3
Windows XP не имеет DOS.
user1686
@KContreau, интересующийся. Так что это будет причиной того, что мои партии не сохраняют подкоски доски после команды «запуск / отделение», а только с «cmd / k» или «cmd / c» ...
kokbira
мы должны изменить название вопроса или нет после выпуска "Разъяснения"?
Кокбира
1
@KCotreau: Технически, это часть подсистемы Win32 Console, а не только для нее cmd.exe.
user1686

Ответы:

9

Если вы хотите, чтобы он загружался при загрузке, а не при входе в систему, если у вас есть XP Pro (XP home не включает gpedit.msc), сделайте следующее:

Пуск> Выполнить> gpedit.msc

и нажмите ввод. Затем запустите gpupdate / force из командной строки.

Перейти к

Конфигурация компьютера> Настройки Windows> Сценарии> Запуск

и добавьте местоположение к сценарию.

Вы также можете сделать это для входа пользователя в систему

Конфигурация пользователя> Настройки Windows> Сценарии> Запуск

Если у вас есть XP Home, вы можете скопировать сценарии в:

C: \ Windows \ System32 \ GroupPolicy \ Machine \ Scripts \ Startup

для загрузки их при загрузке, или:

C: \ Windows \ System32 \ GroupPolicy \ User \ Scripts \ Logon

для загрузки их для пользователя при входе в систему. Папка GroupPolicy скрыта.

KCotreau
источник
1
Я бы предпочел этот метод, чтобы поместить его в папку автозагрузки. Делает это более постоянным.
Джо Тейлор
1
@ Джо Тейлор Спасибо. Если честно, я использую папку «Автозагрузка» только для запуска Outlook. Это более стандартный способ сделать это с точки зрения системного администрирования.
Котро
@ KContreau, ваше решение очень полезно, но не для этого случая. Я проверял, но он не функционировал для команды подстановки doskey ...
kokbira
@kokbira Оригинальный вопрос был просто «Как запустить скрипт при запуске в XP?», на который, я думаю, я ответил точно. Он отредактировал и добавил часть «например, и doskey ls = dir» после.
Котро
1
@ KContreau, вы правы, проблема в том, что заголовок этого вопроса неверен. В «Разъяснении» он сказал, что хочет «запустить некоторые команды DOS, когда я запускаю приглашение DOS, главным образом для установки псевдонимов ». Чтобы выполнить некоторые команды при запуске Windows, ваше решение в порядке, но запускать псевдонимы - нет.
Кокбира
47

Псевдонимы команд относятся к окну консоли, в котором вы их настраиваете, поэтому сценарий запуска не будет работать. Вы можете сделать это следующим образом:

  1. Создайте командный файл ( .cmd) с вашими командами doskey , поместите его где-нибудь в Application Data.

  2. Настройте его на автоматический запуск при каждом открытии cmd . Настройка в реестре:

    • ключ: HKCU\SOFTWARE\Microsoft\Command Processor
    • значение: AutoRun
    • тип: REG_EXPAND_SZ
    • данные: "%AppData%\aliases.cmd"
user1686
источник
1
Это было отличное решение для Win2K Virtual OS, где я хотел, чтобы командная строка всегда загружала пути моего компилятора. Единственное отличие заключалось в использовании REG_SZ вместо REG_EXPAND_SZ
Джеймс
Это хорошее решение. Случайно, есть ли способ подавить первоначальный вывод?
Нбурр
1
@Nickolas: Просто перенаправить команды в NUL как всегда?
user1686
Это прекрасно работает ОДНАКО это может помешать компилятору ресурсов Windows (rc.exe) вызвать ошибки типа «Системе не удается найти указанный путь». См. Visual Studio Shell Изолированный проект не компилируется .
Пользователь5910
Я исправил это, установив проверку на наличие файла первым:if exist "%AppData%\aliases.cmd" "%AppData%\aliases.cmd"
User5910
4

Различные интерпретаторы команд обрабатывают псевдонимы команд по-разному.

CMD от Microsoft опирается на консольную подсистему Win32 для обеспечения механизма псевдонимов команд. Команда doskeyфактически взаимодействует с консолью процесса, и сама консоль содержит псевдонимы. Таким образом, псевдонимы являются консольными и временными.

TCC / LE от JP Software обрабатывает псевдонимы самостоятельно. aliasКоманда позволяет просматривать и манипулировать псевдонимы, которые являются либо «локальными» или «глобальными». Псевдонимы все еще являются временными, но являются частными для одного процесса интерпретатора команд или совместно используются всеми процессами интерпретатора команд (на всех консолях).

Такие оболочки, как оболочка Korn в служебном инструментарии SFUA, чьи инструменты работают в Подсистеме для приложений на базе UNIX, которая поставляется в комплекте с Windows 7 Ultimate Edition и Windows Server 2008 R2 (для Windows XP можно загрузить и установить Службы для UNIX версии 3.5 .) - и оболочка Bourne Again от cygwin аналогичным образом обрабатывает сами псевдонимы. Псевдонимы являются временными, и для процесса интерпретатора команды.

Автоматическая загрузка начального набора псевдонимов по умолчанию также зависит от интерпретатора команд.

Во всех случаях можно поместить команды для установки псевдонимов в каком-либо сценарии.

grawityуже дал один из двух ключей реестра, которые заставляют CMD Microsoft запускать команду при запуске . К сожалению, это процесс интерпретатора команд, хотя сами псевдонимы хранятся на консоли . Запустите дополнительный командный интерпретатор из исходного, и любые ручные изменения псевдонимов по умолчанию будут сброшены. Альтернатива, которая, по крайней мере, выполняет инициализацию только один раз для каждой консоли, заключается в добавлении /Kопции и имени командного сценария, который вызывает doskeyкомандный хвост, в ярлык, запускающий интерпретатор команд.

TCC / LE от JP Software автоматически запускает TCSTARTскрипт при запуске. Опять же, это процесс интерпретации команд. Однако «локальные» псевдонимы TCC также используются для каждого процесса интерпретатора команд, поэтому это подходящее место для инициализации псевдонимов, если используются локальные псевдонимы. Для глобальных псевдонимов, просто создать ярлык в Startupпапке , которая загружает псевдонимы из файла (с alias /r) , а затем запускают в shraliasкоманду так , что они сохраняются после того, что ярлык завершения работы.

Для оболочек Bourne Again и Korn просто делайте то же самое, что и эти оболочки на любой другой платформе. Используйте aliasкоманду в $HOME/.profileи $HOME/.bashrcсценарии для оболочки Bourne Again; и используйте aliasкоманду в $HOME/.profile, ENV и $HOME/.kshrcсценарии для оболочки Korn.

JdeBP
источник
2

Ответ Гравити отлично сработал для меня.

Я создал скрипт shell-aliases.cmd в своей папке «Документы» (где-нибудь, где я могу найти его позже).

Затем создал расширяемое строковое значение AutoRun в разделе реестра:

'HKEY_CURRENT_USER \ Программное обеспечение \ Microsoft \ Командный процессор'

Задайте значение для полного пути к файлу псевдонимов (мой был в 'C: \ Users \ Lee \ Documents \ shell-aliases.cmd').

Как только я перезагрузил командную строку, мои псевдонимы работали. Кроме того, мой файл псевдонимов легко доступен и готов к редактированию, так как я думаю добавить еще.

lee8oi
источник
0

Есть несколько мест, которые можно использовать, но меню «Пуск»> «Папка запуска», вероятно, является самым простым.

Запустите msconfig и посмотрите, какие программы запускаются и почему. Вы можете просто добавить свою программу в один из этих списков (например, в реестре).

Konerak
источник
0

Проблема здесь в том, что если вы делаете это при запуске, эти замены будут доступны только в открывшемся приглашении CMD. Если он закрывается, все эти замены будут потеряны и должны быть выполнены снова для каждой открытой командной строки.

Итак, несколько альтернативных способов (их можно комбинировать):

I. Создайте пакет и ярлык:

  1. Создайте пакет с этими макросами и сохраните его в известном месте (например, c: \ apps \ mycmd.bat).
  2. Создайте для него ярлык на рабочем столе (или там, где вы хотите), поместив «cmd / k» перед его путем (например, «cmd /kc:\apps\mycmd.bat»).
  3. Таким образом, все ваши команды будут выполняться каждый раз, когда вы открываете этот ярлык.

II. Создайте пакет и запись в переменной окружения PATH:

  1. Создайте пакет с этими макросами и сохраните его в известном месте (например, c: \ apps \ mycmd.bat).
  2. Перейдите в Панель управления> Система> Расширенные настройки> Дополнительно> Переменные среды.
  3. В записях пользователя или системы найдите переменную с именем PATH. Дважды щелкните по нему и, в конце, вставьте «;» и путь к вашей BAT (например, "c: \ apps \" => "previous_string; c: \ apps \"), затем Ok и Ok.
  4. Поэтому, когда вы используете cmd (или в файле BAT), просто поместите имя BAT в созданный путь (например, «c: \ apps») для запуска ваших команд (например, введите «myapps» для запуска этих команд замещения).
kokbira
источник
1
Я попытался «запустить / отделить», но он сохраняет только переменную окружения (не подстановки команды doskey) ... Команда «set» также действительна только для открытого приглашения, но мы можем использовать «setx» для ее сохранения в системе или переменные среды пользователя "навсегда". Я не знаю, есть ли способ сохранить подмены doskey «навсегда» в системе или при каждом запуске Windows. Я предпочитаю использовать свои способы ...
Кокбира