Executando comandos automaticamente quando um prompt de comando é aberto

21

Estou procurando uma maneira de executar alguns comandos do console automaticamente quando um prompt de comando é aberto no Windows, especificamente para definir alguns aliases de comando.

Por exemplo, quando um prompt de comando é aberto, desejo que um comando como o seguinte seja executado automaticamente para que eu possa usar em lsvez de dir.

doskey ls=dir

Como isso pode ser feito?

Daniel Williams
fonte
3
Windows XP não possui DOS.
user1686
@KContreau, interessant. Então seria a razão para os meus lotes não salva subsitutions doskey após um comando "start / separado", mas apenas com "cmd / k" ou "cmd / c" ...
kokbira
temos que mudar o título da pergunta ou não após a edição "Esclarecimento"?
kokbira
11
@KCotreau: Tecnicamente, faz parte do subsistema do console Win32, não específico cmd.exe.
user1686

Respostas:

9

Se você deseja que ele seja carregado na inicialização, e não ao fazer login, se você possui o XP Pro (o XP home não inclui gpedit.msc), faça o seguinte:

Iniciar> Executar> gpedit.msc

e aperte enter. Em seguida, execute gpupdate / force a partir de uma linha de comando.

Vamos para

Configuração do computador> Configurações do Windows> Scripts> Inicialização

e adicione o local ao script.

Você também pode fazer isso para um logon de usuário em

Configuração do usuário> Configurações do Windows> Scripts> Inicialização

Se você possui o XP Home, pode copiar os scripts para:

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

para carregá-los na inicialização ou:

C: \ Windows \ System32 \ GroupPolicy \ Usuário \ Scripts \ Logon

para carregá-los para um usuário no logon. A pasta GroupPolicy está oculta.

KCotreau
fonte
11
Eu preferiria esse método a colocá-lo na pasta de inicialização. Torna mais permenante.
Joe Taylor
11
@ Joe Taylor Obrigado. Para ser sincero, só uso a pasta Inicialização para iniciar o Outlook. Essa é uma maneira mais padrão de fazer isso do ponto de vista da administração do sistema.
KCotreau
@KContreau, sua solução é muito útil, mas não para esse caso. Eu testei, mas isso não funcionou para o comando de substituição doskey ...
kokbira
@kokbira A pergunta original era simplesmente "Como executar um script na inicialização do XP?", que acho que respondi com precisão. Ele editou e adicionou a parte "por exemplo, e doskey ls = dir" depois.
KCotreau
11
@ KContreau, você está certo, o problema é que o título desta pergunta não está correto. Em "Esclarecimento", ele disse que deseja "executar alguns comandos do DOS quando eu iniciar um prompt do DOS, principalmente para definir alguns aliases ". Para executar alguns comandos quando o Windows iniciar, sua solução está ok, mas executar aliases não.
Kokbira
47

Os aliases de comando são específicos para a janela do console em que você os configura, portanto, um script de inicialização não funcionará. Você pode fazer assim:

  1. Crie um arquivo em lotes ( .cmd) com seus comandos doskey , coloque-o em algum lugar nos Dados do Aplicativo.

  2. Configure-o para ser iniciado automaticamente sempre que você abrir o cmd . A configuração está no Registro:

    • chave: HKCU\SOFTWARE\Microsoft\Command Processor
    • valor: AutoRun
    • tipo: REG_EXPAND_SZ
    • dados: "%AppData%\aliases.cmd"
user1686
fonte
11
Essa foi uma ótima solução para um sistema operacional Win2K virtual, onde eu queria que o prompt de comando carregasse sempre meus caminhos do compilador. A única diferença foi o uso de REG_SZ em vez de REG_EXPAND_SZ
James
Esta é uma boa solução. Por acaso, existe alguma maneira de suprimir a saída inicial?
Nburr 10/09/16
11
@ Nickolas: Basta redirecionar os comandos para NUL como sempre?
user1686
No entanto, isso funciona lindamente, mas pode interferir no compilador de recursos do Windows (rc.exe), causando erros como "O sistema não consegue encontrar o caminho especificado". Consulte O projeto isolado do Visual Studio Shell não compila .
User5910
if exist "%AppData%\aliases.cmd" "%AppData%\aliases.cmd"
Corrigi isso corrigindo a
4

Diferentes intérpretes de comando lidam com aliases de comando de maneiras diferentes.

O CMD da Microsoft conta com o subsistema de console do Win32 para fornecer seu mecanismo de alias de comando. O doskeycomando realmente interage com o console do processo e é o próprio console que mantém os aliases. Assim, os aliases são por console e transitórios.

O TCC / LE da JP Software lida com apelidos. O aliascomando permite visualizar e manipular aliases, que são "locais" ou "globais". Os aliases ainda são transitórios, mas são privados para um processo de intérprete de comando ou compartilhados entre todos os processos de intérprete de comando (em todos os consoles).

Blocos como o shell Korn no kit de ferramentas do utilitário SFUA - cujas ferramentas são executadas no Subsistema para aplicativos baseados em UNIX, que vem junto com o Windows 7 Ultimate edition e o Windows Server 2008 R2 (no Windows XP, é possível baixar e instalar Services for UNIX versão 3.5 .) - e o shell Bourne Again do cygwin também lida com apelidos. Os aliases são transitórios e por processo do interpretador de comandos.

O carregamento automático de um conjunto inicial de aliases padrão varia também por interpretador de comandos.

Em todos os casos, coloca-se comandos para definir os aliases em um script de algum tipo.

grawityjá forneceu uma das duas chaves do registro que fazem com que o CMD da Microsoft execute um comando ao iniciar . Infelizmente, isso é por processo de intérprete de comando, mesmo que os aliases sejam armazenados por console . Inicie um intérprete de comando secundário a partir do inicial e quaisquer alterações manuais nos aliases padrão serão redefinidas. Uma alternativa, que pelo menos executa a inicialização apenas uma vez por console, é adicionar a /Kopção e o nome de um script de comando que chama doskeya cauda do comando no atalho que inicia o interpretador de comandos.

O TCC / LE da JP Software executa automaticamente o TCSTARTscript na inicialização. Novamente, isso é por processo de intérprete de comando. No entanto, os aliases "locais" do TCC também são por processo de intérprete de comando, portanto, este é o lugar certo para inicializar aliases se alguém estiver usando aliases locais. Para aliases globais, basta criar um atalho na Startuppasta que carrega aliases de um arquivo (com alias /r) e, em seguida, executa o shraliascomando para que eles persistam após a conclusão da execução do atalho.

Para as conchas Bourne Again e Korn, basta fazer como faria com essas conchas em qualquer outra plataforma. Use o aliascomando nos scripts $HOME/.profilee $HOME/.bashrcpara o shell Bourne Again; e use o aliascomando $HOME/.profile, ENV e $HOME/.kshrcscripts para o shell Korn.

JdeBP
fonte
2

A resposta da Gravity funcionou muito bem para mim.

Eu criei um script shell-aliases.cmd na minha pasta Documentos (em algum lugar posso encontrá-lo mais tarde).

Em seguida, criou o valor da cadeia de caracteres expansível 'AutoRun' na chave do Registro:

'HKEY_CURRENT_USER \ Software \ Microsoft \ Command Processor'

Defina o valor como o caminho completo para o arquivo de aliases (o meu estava em 'C: \ Users \ Lee \ Documents \ shell-aliases.cmd').

Depois que recarreguei o prompt de comando, meus apelidos doskey funcionaram. Além disso, meu arquivo de aliases é facilmente acessível e pronto para editar, pois penso em mais para adicionar.

lee8oi
fonte
0

Existem vários locais que farão isso, mas o menu Iniciar> pasta de inicialização provavelmente é o mais fácil.

Execute 'msconfig' e veja quais programas são iniciados e por quê. Você pode simplesmente adicionar seu programa a uma dessas listas (por exemplo, no registro).

Konerak
fonte
0

O problema aqui é que, se você fizer isso na inicialização, essas substituições estarão disponíveis apenas no prompt do CMD aberto. Se fechar, todas essas substituições serão perdidas e deverão ser feitas novamente para cada prompt de comando aberto.

Portanto, algumas maneiras alternativas (você pode combiná-las):

I. Crie um lote e um atalho:

  1. Crie um lote com essas macros e salve-o em algum lugar conhecido (por exemplo, c: \ apps \ mycmd.bat).
  2. Crie um atalho para ele na área de trabalho (ou onde desejar) colocando "cmd / k" antes do caminho (por exemplo, "cmd /kc:\apps\mycmd.bat").
  3. Portanto, todos os seus comandos serão executados toda vez que você abrir esse atalho.

II Crie um lote e uma entrada na variável de ambiente PATH:

  1. Crie um lote com essas macros e salve-o em algum lugar conhecido (por exemplo, c: \ apps \ mycmd.bat).
  2. Vá para Painel de controle> Sistema> Configurações avançadas> Avançado> Variáveis ​​de ambiente.
  3. Nas entradas Usuário ou Sistema, procure uma variável chamada PATH. Clique duas vezes nele e, no final, insira ";" e o caminho para o seu BAT (por exemplo, "c: \ apps \" => "previous_string; c: \ apps \"), depois Ok e Ok.
  4. Portanto, quando você usa um cmd (ou em um arquivo BAT), basta colocar o nome de um BAT no caminho criado (por exemplo, "c: \ apps") para executar seus comandos (por exemplo, digite "myapps" para executar esses comandos de substituição).
kokbira
fonte
11
Tentei "iniciar / separar", mas ele salva apenas a variável de ambiente (não as substituições do comando doskey) ... O comando "set" também é válido apenas no prompt aberto, mas podemos usar "setx" para salvá-lo no sistema ou variáveis ​​de ambiente do usuário "para sempre". Não sei se existe uma maneira de salvar as substituições doskey "para sempre" no sistema ou em todas as inicializações do Windows. Eu prefiro usar meus caminhos ...
kokbira