Como definir um alias na linha de comando do Windows?

58

Eu costumava trabalhar no bash e me beneficiar muito do pseudônimo. Existe alguma maneira equivalente no Windows Command Line?

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

    
por StarPinkER 04.03.2013 / 08:28

8 respostas

51

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

Parâmetros de macro são referenciados na definição via $ posições prefixadas: $1 a $9 e $* para todos.

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

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

  • As macros só funcionam na linha de comando interativa - elas não funcionam em um script em lotes.
  • Eles não podem ser usados nos dois lados de um canal: someMacro|findstr '^' e dir|someMacro falham.
  • Eles não podem ser usados em comandos FOR / F: for /f %A in ('someMacro') do ... falha

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

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

Você pode criar "macros" de variáveis simples para comandos longos e mais usados, mas a sintaxe é um pouco difícil de digitar, já que 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%
    
por 04.03.2013 / 13:03
11

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

No Linux, você cria um script e o adiciona à pasta ~/bin nas janelas. Você pode fazer o mesmo.

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

quickcd.cmd

@echo off
cd a_very_long_path

Agora você pode digitar quickcd na linha de comando.

Ele também pode ser chamado dentro de um script usando a função call

call quickcd
    
por 04.03.2013 / 14:01
11

SUBST

Se você realmente está tentando contornar algo assim:

c: cd \ users \ myLoginID \ documentos \ clientes \ MTV \ strategy \ roadmap \ deliverable \ final

você pode usar o comando subst para mapear esse caminho longo para uma letra de unidade separada

subst: c: \ users \ myLoginID \ documents \ clients \ MTV \ estratégia \ roadmap \ deliverable \ final

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

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

Se você não quiser mais o mapeamento:

subst m: / D

    
por 09.01.2014 / 07:21
8

Você pode usar o mesmo truque que o Windows usa: definir uma variável de ambiente (ou apenas uma variável em um contexto de lote) por exemplo, há uma variável de ambiente% windir% (e algumas outras) Então você pode fazer um

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 quer que você esteja):

dir %mydir%

ou

cd %mydir%

ou o que você quiser.

    
por 11.03.2013 / 11:14
1

Eu criei um "alias" como esse especificamente para alterar o diretório. Basicamente eu criei um arquivo chamado fav.bat e 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. Eu escrevi um artigo completo sobre essa técnica aqui .

    
por 09.09.2015 / 20:42
1

Ao contrário do Linux, os aliases do Windows 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 em %SystemRoot%\System32 , mas é um recurso de cmd.exe que está localizado em %SystemRoot% ou %Windir% , ambos apontando para a pasta C:\Windows por padrão.

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

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

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

Eu sempre usaria $* e aspas duplas$1 se houvesse apenas um argumento para omitir espaços que são tratados como caracteres especiais, ou seja, como separadores (para comandos).

Além disso, você pode definir suas macros aliases em um arquivo separado, digamos LinuxAliases.macro e, em seguida, fonte-lo usando

doskey /macrofile=LinuxAliases.macro

Ele carregará todos os alias definidos no arquivo para a sessão atual, ou seja, quando você exit de cmd.exe process (também conhecido como shell e prompt de comando), eles se foram.

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

Aqui está o oficial e até melhor documentações para o comando.

    
por 16.11.2016 / 20:10
0

assumindo que você permaneça na mesma unidade, ou seja, não é necessário D: , em seguida, cd D:\somedir\ .

No meu caso, C: conté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 desses, 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 uso 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

wd por si só deveria me mostrar a lista de diretórios marcados. Funciona, mas não tenho certeza porque estou recebendo essa mensagem de "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 regulares .cmd

Além da navegação no diretório, você pode criar um foo.cmd em algum lugar no seu PATH e pode agir como um alias. Lembre-se, ao contrário dos shells do Linux / OSX, os arquivos cmd podem afetar as variáveis de ambiente e a sessão, sem precisar fornecer a eles.

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):                       
    
por 16.11.2016 / 19:41
0

Uma pergunta semelhante foi postada no StackOverflow e a solução legal foi neste comentário link

    
por 07.02.2017 / 22:21