¿Cómo establecer un alias en la línea de comandos de Windows?

66

Solía ​​trabajar en bash y beneficiarme mucho del alias. ¿Hay alguna forma equivalente en la línea de comandos de Windows?

No quiero simular un entorno Linux, por lo que cygwin no es una opción. Solo necesito un atajo para un comando muy largo, como cd a_very_long_path.

StarPinkER
fuente
55
Lo usarías doskey(no te dejes engañar por el nombre, no es el viejo DOSkey de MS DOS). Úselo doskey /?para más información. Aparte de eso, me temo, esta pregunta está fuera de tema aquí.
Christian.K
Posible duplicado de ¿Hay un comando para cambiar la ruta desde la ubicación actual al directorio predeterminado, en el símbolo del sistema de Windows? Específicamente, vea mi respuesta para saber cómo puede hacer que sus macros DOSKey se carguen automáticamente cuando se abre el símbolo del sistema.
Karan
relacionados + una manera de hacer doskey permanente superuser.com/questions/49170/...
laggingreflex

Respuestas:

61

Como dijo Christian.K en su comentario, el comando DOSKEY se puede usar para definir macros, que son análogas a los alias.

doskey macroName=macroDefinition

Los parámetros de macro se referencian en la definición a través de $posiciones prefijadas: a $1través $9y $*para todos.

Consulte la documentación de doskey technet , o escriba doskey /?o help doskeydesde la línea de comandos para obtener más información.

Pero existen serias limitaciones con las macros de DOSKEY:

  • Las macros solo funcionan en la línea de comandos interactiva, no funcionan dentro de un script por lotes.
  • No se pueden usar en ningún lado de una tubería: ambos someMacro|findstr '^'y dir|someMacrofallan.
  • No se pueden usar dentro de los comandos FOR / F: for /f %A in ('someMacro') do ...falla

Las limitaciones son tan severas que rara vez uso macros DOSKEY.

Obviamente, puede crear scripts por lotes en lugar de macros y asegurarse de que las ubicaciones de los scripts estén en su RUTA. Pero luego debe anteponer cada script con CALL si desea utilizar el script dentro de otro script.

Puede crear "macros" variables simples para comandos largos y de uso frecuente, pero la sintaxis es un poco incómoda de escribir, ya que necesita expandir la "macro" cuando desea usarla.

Definición:

set "cdMe=cd a_very_long_path"

Uso (desde la línea de comandos o script)

%cdMe%
dbenham
fuente
Gracias, ¿hay alguna forma de trabajar dentro de un script por lotes?
StarPinkER
@JermaineXu: de ninguna manera con las macros de DOSKEY. Vea mi respuesta actualizada para alternativas crudas.
dbenham
2
La ventaja de la segunda solución es que las tuberías funcionarán. La primera solución con doskey no funcionará cuando desee utilizar la macro en tuberías.
CEO en Apartico
¿Cómo puedo poner estas macros visibles en el cuadro Win + R (cuadro de diálogo Ejecutar)
ZEE
@ZEE - No puedes. Las macros de DOSKEY se deben introducir físicamente en una ventana de consola que ejecute cmd.exe.
dbenham
15

Puede hacer un script por lotes y guardarlo en su ruta.

En Linux, haría un script y lo agregaría a la carpeta ~/binen Windows, puede hacer lo mismo.

Agregue %USERPROFILE%\bina su PATHvariable de entorno. Luego guarda tus scripts allí.

quickcd.cmd

@echo off
cd /d a_very_long_path

Ahora puede escribir quickcden la línea de comando.

También se puede invocar dentro de un script usando la callfunción

call quickcd
William Bettridge-Radford
fuente
Esto no funciona: configurar el directorio dentro de un archivo por lotes solo afecta al archivo por lotes. La ruta se revierte cuando sale el archivo por lotes.
Sombra
1
Me esta funcionando. Microsoft Windows [Version 10.0.17134.648]
William Bettridge-Radford
Eso es realmente extraño Entonces, si copia y pega el ejemplo anterior (cambiando el directorio a uno que existe), ¿funciona para usted?
Sombra
¿Tu carpeta está en otra unidad? Es posible que deba agregar la /dbandera aCD
William Bettridge-Radford
13

subst

Si realmente estás tratando de evitar algo como esto:

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

Puede usar el substcomando para asignar esa ruta larga a una letra de unidad separada

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

Luego, cuando desee saltar a esa carpeta, simplemente puede escribir m:en la línea de comando.

La ventaja de esto doskeyes que funciona en todos los programas por lotes y aparece en cualquier cuadro de diálogo de archivo dentro de Windows.

Si ya no quieres el mapeo:

subst m: /D
Harley Young
fuente
3
También me gusta esto, pero consume letras de unidad.
ggb667
8

Podría usar el mismo truco que usa Windows: establecer una variable de entorno (o simplemente una variable en un contexto por lotes), por ejemplo, hay una variable de entorno% windir% (y algunos otros) Para que pueda hacer un

cd C:\Windows\

o

cd %windir%

que hace lo mismo Entonces, todo lo que tienes que hacer es:

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

después de eso puedes hacer (desde donde estés):

dir %mydir%

o

cd %mydir%

o lo que quieras

stephan
fuente
1
Ese es el boleto @stephan!
jbchurchill
3

A diferencia de Linux, en Windows los alias pueden tomar argumentos y se les pueden dar parámetros para asignar esos argumentos en su definición.

El comando interno incorporado es doskey , lo que significa que no es un archivo ejecutable externo ubicado, %SystemRoot%\System32sino que es una característica de la cmd.execual se encuentra %SystemRoot%o %Windir%apunta a la C:\Windowscarpeta de manera predeterminada.

Doskey define alias entre muchas otras cosas. En la terminología de Windows, los alias se denominan macros. Para establecer un alias que usa

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

Aquí $1apunta al primer argumento, y $*apunta a todos los argumentos.

Siempre usaría $*una comilla doble $1si solo hay un argumento para omitir espacios que se tratan como caracteres especiales, es decir, como separadores (para comandos).

Además, puede definir sus macros de alias en un archivo separado, decir LinuxAliases.macroy luego obtenerlo usando

doskey /macrofile=LinuxAliases.macro

Cargará todos los alias definidos dentro del archivo solo para la sesión actual , lo que significa que cuando esté exitfuera del cmd.exeproceso (también conocido como shell y símbolo del sistema), desaparecerán.

Para tener alias permanentes, puede escribir el comando completo en algún lugar de una clave regedit llamada AutoRun o AutoCommand o algo similar, lo que no puedo recordar ahora junto con la sintaxis interna del archivo de macro: P


Aquí están las documentaciones oficiales e incluso mejores para el comando.


fuente
1

He hecho un "alias" como ese específicamente para cambiar el directorio. Básicamente, creé un archivo llamado fav.baty lo puse en una carpeta en PATH (por ejemplo, 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

Entonces puedo saltar a cualquier carpeta predefinida muy rápidamente. Escribí un artículo completo sobre esa técnica aquí .

VitalyB
fuente
0

suponiendo que permanezca en el mismo disco, es decir, no D:se cd D:\somedir\necesita.

En mi caso, C: contiene archivos del sistema, pero todo el trabajo está en D:

2 partes. Primero configure algunos directorios de trabajo, utilizando un archivo por lotes.

digamos localprofile.cmd . Puede tener varios de estos, simplemente ejecútelos según sea necesario.

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

ahora use otro archivo de comando para moverse, basado en las variables de entorno que acaba de establecer.

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%

Y un poco de muestra de uso:

D:\home\bin>wd 2

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

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

Se supone que wd por sí solo me muestra la lista de directorios marcados. Funciona, pero no estoy seguro de por qué recibo este mensaje 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 de .cmd

Además de la navegación del directorio, puede crear un foo.cmd en algún lugar de su RUTA y puede actuar como un alias. Recuerde, a diferencia de los shells de Linux / OSX, los archivos cmd pueden afectar las variables de entorno y la sesión, sin necesidad de obtenerlas .

Tengo un cdbin.cmd para navegar, por ejemplo:

d:
cd \home\bin

Y este es un pseudo-grep grep.cmd

findstr -n %1 %2

en acción (cualquiera que sea el 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):                       
JL Peyret
fuente
0

Puede usar doskey.exe , aquí hay un ejemplo:

doskey qcd=cd [pathname]

Y ahora, si escribe qcd, se cd a esa ruta.

Aquí hay algo de ayuda con las macro de doskey :

doskey [macroname]=[command]

Esa es la forma más simple, aquí hay un ejemplo:

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

y si escribe wordla salida es:

Esta es una oración muy, muy larga.

Puede usar $ 1- $ 9 para los parámetros, aquí hay un ejemplo:

doskey npd=notepad $1

y si escribe npd, abrirá el bloc de notas, pero si escribimos,npd test.txt abrirá test.txt en el bloc de notas .

Puede usar $ * para todos los parámetros, aquí hay otro ejemplo:

doskey prt=echo $*

y si escribe prt This is short., la salida será:

Esto es corto

Puede usar $ T para múltiples comandos, aquí hay un ejemplo:

doskey newline=echo $1 $T echo $2

y si escribe newline Hello and, la salida será:

Hola

y

Espero que entiendas.

Hayz
fuente