Como definir um alias na linha de comando do Windows?


66

Eu trabalhava no bash e me beneficiava muito com o alias. Existe alguma maneira equivalente na linha de comando do Windows?

Não quero simular um ambiente Linux, portanto, o cygwin não é uma escolha. Eu só preciso de um atalho para um comando muito longo, como cd a_very_long_path.


5
Você usaria doskey(não se deixe enganar pelo nome, não é a antiga chave do MS DOS). Use doskey /?para mais informações. Fora isso, receio, esta questão está fora de tópico aqui.
Christian.K

Possível duplicata de Existe um comando para alterar o caminho do local atual para o diretório padrão, no prompt de comando do Windows? Especificamente, consulte minha resposta para saber como é possível carregar automaticamente as macros do DOSKey quando o prompt de comando é aberto.
Karan

relacionados + uma maneira de fazer doskey permanente superuser.com/questions/49170/...
laggingreflex

Respostas:


61

Como Christian.K disse em seu comentário, o comando DOSKEY pode ser usado para definir macros, que são análogas aos aliases.

doskey macroName=macroDefinition

Os parâmetros de macro são referenciados na definição através de $posições prefixadas: $1através $9e $*para todos.

Consulte a documentação do doskey technet ou digite doskey /?ou help doskeyna linha de comando para obter mais informações.

Mas há sérias limitações nas macros do DOSKEY:

  • As macros funcionam apenas na linha de comando interativa - elas não funcionam em um script em lote.
  • Eles não podem ser usados ​​em ambos os lados de um tubo: ambos someMacro|findstr '^'e dir|someMacrofalham.
  • Eles não podem ser usados ​​em um comando FOR / F: for /f %A in ('someMacro') do ...falha

As limitações são tão severas que raramente uso macros do DOSKEY.

Obviamente, você pode criar scripts em lote em vez de macros e verifique se os locais dos scripts estão no seu PATH. Mas então você deve prefixar cada script com CALL se desejar usar o script em outro script.

Você pode criar "macros" de variáveis ​​simples para comandos longos e frequentemente usados, mas a sintaxe é um pouco estranha de digitar, pois você precisa expandir a "macro" quando quiser usá-la.

Definição:

set "cdMe=cd a_very_long_path"

Uso (da linha de comando ou script)

%cdMe%

Obrigado, existe alguma maneira de trabalhar em um script em lote?
StarPinkER 4/03/13

@ JermaineXu - De maneira nenhuma com macros DOSKEY. Veja minha resposta atualizada para alternativas brutas.
dbenham

2
O profissional da segunda solução é que a tubulação funcionará. A primeira solução com o doskey não funcionará quando você desejar usar a macro na tubulação.
CEO na Apartico

como posso colocar isso macros visíveis para a caixa de Win + R (de diálogo Executar)
ZEE

@ZEE - Você não pode. As macros DOSKEY devem ser fisicamente inseridas em uma janela do console que esteja executando o cmd.exe.
dbenham

15

Você pode criar um script em lote e salvá-lo no seu caminho.

No Linux, você criaria um script e o adicionaria à pasta ~/binno Windows e poderá fazer o mesmo.

Adicione %USERPROFILE%\binà sua PATHvariável de ambiente. Em seguida, salve seus scripts lá.

quickcd.cmd

@echo off
cd /d a_very_long_path

Agora você pode digitar quickcdna linha de comando.

Também pode ser chamado dentro de um script usando a callfunção

call quickcd

Isso não funciona - a configuração do diretório em um arquivo em lotes afeta apenas o arquivo em lotes. O caminho reverte quando o arquivo em lotes sai.
Shadow

1
Está funcionando para mim. Microsoft Windows [Version 10.0.17134.648]
William Bettridge-Radford 23/03

Isso é realmente estranho. Então, se você copiar e colar o exemplo acima (alterando o diretório para um que exista), ele funcionará para você?
Shadow

Sua pasta está em outra unidade? Talvez você precise adicionar a /dbandeiraCD
William Bettridge-Radford

13

subst

Se você realmente está tentando contornar algo assim:

C:> cd \users\myLoginID\documents\clients\MTV\strategy\roadmap\deliverable\final

Você pode usar o substcomando para mapear esse caminho longo para uma letra de unidade separada

subst m: c:\users\myLoginID\documents\clients\MTV\strategy\roadmap\deliverable\final

Então, quando você quiser pular para essa pasta, basta digitar m:na linha de comando.

A vantagem disso doskeyé que ele funciona em todos os programas em lote e aparece em qualquer caixa de diálogo de arquivo no Windows.

Se você não deseja mais o mapeamento:

subst m: /D

3
Eu também gosto disso, mas COME letras de unidade.
precisa saber é o seguinte

8

Você pode usar o mesmo truque usado pelo Windows: defina uma variável de ambiente (ou apenas uma variável em um contexto de lote), por exemplo, existe uma variável de ambiente% windir% (e algumas outras).

cd C:\Windows\

ou

cd %windir%

que faz o mesmo. Então, tudo o que você precisa fazer é:

set "mydir=C:\very\long\path\to\my\data\"

Depois disso, você pode fazer (de onde você estiver):

dir %mydir%

ou

cd %mydir%

ou o que você quiser.


1
Esse é o bilhete @stephan!
Jbchurchill

3

Ao contrário do Linux, no Windows, os aliases podem receber argumentos e podem receber parâmetros para atribuir esses argumentos em suas definições.

O comando interno interno é doskey , o que significa que não é um arquivo executável externo localizado, %SystemRoot%\System32mas é um recurso do cmd.exequal ele próprio está localizado %SystemRoot%ou %Windir%aponta para a C:\Windowspasta por padrão.

Doskey define aliases entre muitas outras coisas. Na terminologia do Windows, os aliases são chamados de macros. Para definir um alias você usa

doskey alias=command $1 $2 ... $9 or $* (to catch them all) 

Aqui $1aponta para o primeiro argumento e $*aponta para todos os argumentos.

Eu sempre usaria $*aspas duplas $1se houver apenas um argumento para omitir espaços tratados como caracteres especiais, como separadores (para comandos).

Além disso, você pode definir suas macros de aliases em um arquivo separado, digamos LinuxAliases.macroe, em seguida, obtê-lo usando

doskey /macrofile=LinuxAliases.macro

Ele carregará todos os aliases definidos dentro do arquivo apenas para a sessão atual , ou seja, quando você estiver exitfora do cmd.exeprocesso (também conhecido como shell e prompt de comando), eles desaparecerão.

Para ter aliases permanentes, você pode digitar o comando completo em algum lugar de uma chave regedit chamada AutoRun ou AutoCommand ou algo semelhante, o que não consigo lembrar agora ao lado da sintaxe interna do arquivo de macro: P


Aqui estão as documentações oficiais e ainda melhores para o comando.


1

Eu criei um "alias" como esse especificamente para alterar o diretório. Basicamente, criei um arquivo chamado fav.bate o coloquei em uma pasta no PATH (por exemplo, C: \ MyBatches):

@setlocal
@echo off
set userChoice=%1
rem The format is:
rem call :condition SHORTCUT FOLDER
call :condition web c:\Git\SecThor\SecWeb\App\
call :condition cloud c:\Git\SecThor\SecCloud\dojo.backend\
call :condition good c:\Users\Vitaly\Dropbox\Projects\goodread-friends\
endlocal
popd
GOTO :eof

:condition
rem We do PUSHD twice since endlocal does popd once :|
if "%userChoice%"=="%1" pushd %2 & pushd %2 & echo pushd %2
if "%userChoice%"=="" echo %1 =^> %2
GOTO :eof

Então eu posso pular para qualquer pasta predefinida muito rapidamente. Escrevi um artigo completo sobre essa técnica aqui .


0

supondo que você permanecer na mesma unidade, ou seja, sem D:seguida, cd D:\somedir\necessário.

No meu caso, C: mantém arquivos do sistema, mas todo o trabalho está em D:

2 partes. primeiro defina alguns diretórios de trabalho, usando um arquivo em lotes.

digamos localprofile.cmd . Você pode ter vários deles, basta executá-los conforme necessário.

set wd1=D:\home\work\fb440.dumper
set wd2=D:\home\work\py\tests

agora use outro arquivo de comando para se movimentar, com base nas variáveis ​​de ambiente que você acabou de definir.

wd.cmd

echo off
d:
if %1.==. set | findstr wd
if %1==1 cd %wd1%
if %1==2 cd %wd2%
if %1==3 cd %wd3%
if %1==4 cd %wd4%
if %1==5 cd %wd5%
if %1==6 cd %wd6%

E um pouco de amostra:

D:\home\bin>wd 2

D:\home\bin>echo off
D:\home\work\py\tests>wd 1

D:\home\work\py\tests>echo off

O wd por si só deve me mostrar a lista de diretórios marcados. Funciona, mas não sei por que estou recebendo essa mensagem "CD inesperado".

D:\home\work\fb440.dumper>wd

D:\home\work\fb440.dumper>echo off
wd1=D:\home\work\fb440.dumper
wd2=D:\home\work\py\tests
cd was unexpected at this time.

D:\home\work\fb440.dumper> 

Lotes .cmd regulares

Além da navegação no diretório, você pode criar um foo.cmd em algum lugar do PATH e ele pode atuar como um alias. Lembre-se de que, diferentemente dos shells do Linux / OSX, os arquivos cmd podem afetar as variáveis ​​de ambiente e a sessão, sem precisar originá- los.

Eu tenho um cdbin.cmd para me navegar, por exemplo:

d:
cd \home\bin

E este é um pseudo-grep grep.cmd

findstr -n %1 %2

em ação (qualquer que seja o tipo / + 2 / + 10 significa)

D:\home\work\fb440.dumper>grep class *.py | sort /+2 /+10

dumper2.py:18:class PrettySafeLoader(yaml.SafeLoader):            
dumper2.py:27:class Comparator(object):                           
dumper2.py:3:class module_settings:                               
linker2.py:5:class module_settings:                               
dumper2.py:65:class DataCompProcessor(object):                    
dumper2.py:69:class DataCompTextRenderer(DataCompProcessor):      
dumper2.py:76:class DataComparator(object):                       

0

Você pode usar o doskey.exe , aqui está um exemplo:

doskey qcd=cd [pathname]

E agora, se você digitar qcd, o CD será direcionado para esse caminho.

Aqui está uma ajuda com as macro doskey :

doskey [macroname]=[command]

Essa é a forma mais simples, aqui está um exemplo:

doskey word=echo This is a really, really long sentence.

e se você digitar worda saída é:

Esta é uma frase muito, muito longa.

Você pode usar $ 1- $ 9 para parâmetros, aqui está um exemplo:

doskey npd=notepad $1

e se você digitar, npdele abrirá o bloco de notas, mas, se digitarmos,npd test.txt abrirá o test.txt no bloco de notas .

Você pode usar $ * para todos os parâmetros, aqui está outro exemplo:

doskey prt=echo $*

e se você digitar prt This is short., a saída será:

Isso é curto.

Você pode usar $ T para vários comandos, aqui está um exemplo:

doskey newline=echo $1 $T echo $2

e se você digitar newline Hello and, a saída será:

Olá

e

Espero que entenda.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.