Портирование функций оболочки на cmd.exe: возможно ли автоматически запускать сценарии при запуске? - PullRequest
3 голосов
/ 16 сентября 2009

Я портирую набор инструментов Linux, который часто использует функции оболочки для обеспечения определенной функциональности. Эти функции автоматически создаются при запуске новой оболочки и включают в себя такие вещи, как изменение рабочего каталога, что почти невозможно в автономных программах, поскольку дочерние процессы не могут изменить среду своих родителей.

Например, есть функция cdbm, которая меняет рабочий каталог на ранее созданный в закладки. Теперь я хочу сделать то же самое на Windows, но я застрял с cmd.exe. Насколько я понимаю, скрипты могут быть портированы на jscript, vbscript или обычный пакет, что не должно быть проблемой. Но как мне убедиться, что они автоматически получают источники при запуске и живут в среде оболочки?

Ответы [ 4 ]

8 голосов
/ 16 сентября 2009

Согласно help cmd:

If /D was NOT specified on the command line, then when CMD.EXE starts, it
looks for the following REG_SZ/REG_EXPAND_SZ registry variables, and if
either or both are present, they are executed first.

    HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\AutoRun

        and/or

    HKEY_CURRENT_USER\Software\Microsoft\Command Processor\AutoRun

В качестве теста в regedit я создал новый ключ в показанной выше ветви HLM под названием «AutoRun» со строковым значением «echo Hi». Когда я запустил новый экземпляр cmd, я получил:

Microsoft Windows [Version 6.0.6000]
Copyright (c) 2006 Microsoft Corporation.  All rights reserved.
Hi

C:\Users\Username>

Вместо этого вы можете указать имя сценария для запуска (я бы указал полный путь к сценарию или переменную окружения, например "% HOMEPATH% \ scripts \ scriptname" (включая кавычки если в имени есть пробелы).

Изменить: Ключ реестра имеет некоторые побочные эффекты. Одним из примеров является help. Если у меня есть команда echo выше, например, в автозапуске, когда я набираю help vol, я получаю «Привет» прямо над текстом справки. Делать vol /?, но не делает этого.

2 голосов
/ 16 сентября 2009

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

HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\AutoRun
HKEY_CURRENT_USER\Software\Microsoft\Command Processor\AutoRun

Пакетный файл должен иметь возможность изменять текущий каталог выполняющегося процесса CMD с помощью команды CD, поскольку он не запускается как подпроцесс. Вы можете отключить режим автозапуска, указав /D в качестве переключателя на CMD.

Подробнее см. CMD /?.

1 голос
/ 16 сентября 2009

Поскольку cmd не позволяет вам определять функции в глобальной области видимости, я немного растерялся, чтобы понять, чего именно вы пытаетесь достичь, автоматически выбирая скрипт при запуске. Я обычно включаю в свой каталог каталог командных файлов, куда вы можете помещать пакетные файлы, которые мне регулярно нужны.

0 голосов
/ 16 сентября 2009

Посмотрите на cygwin .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...