Ejecutar comandos automáticamente cuando se abre un símbolo del sistema

21

Estoy buscando una manera de ejecutar algunos comandos de consola automáticamente cuando se abre un símbolo del sistema en Windows, específicamente para establecer algunos alias de comandos.

Por ejemplo, cuando se abre un símbolo del sistema, quiero que un comando como el siguiente se ejecute automáticamente para que pueda usarlo en lslugar de dir.

doskey ls=dir

¿Cómo se puede hacer esto?

Daniel Williams
fuente
3
Windows XP no tiene DOS.
user1686
@KContreau, interessant. Por lo que sería el motivo de mis lotes no guarda subsitutions DOSKEY después de un comando "start / separada", pero sólo con "cmd / k" o "cmd / c" ...
kokbira
¿tenemos que cambiar el título de la pregunta o no después de la edición "Clarificación"?
kokbira
1
@KCotreau: Técnicamente, es parte del subsistema de consola Win32, no específico de cmd.exe.
user1686

Respuestas:

9

Si desea que se cargue en el arranque, en lugar de cuando inicia sesión, si tiene XP Pro (XP Home no incluye gpedit.msc), haga lo siguiente:

Inicio> Ejecutar> gpedit.msc

y pulsa enter. Luego ejecute gpupdate / force desde una línea de comando.

Ir

Configuración del equipo> Configuración de Windows> Scripts> Inicio

y agregue la ubicación al script.

También puede hacer esto para un inicio de sesión de usuario en

Configuración de usuario> Configuración de Windows> Scripts> Inicio

Si tiene XP Home, puede copiar los scripts a:

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

para cargarlos en el arranque, o:

C: \ Windows \ System32 \ GroupPolicy \ User \ Scripts \ Logon

para cargarlos para un usuario al iniciar sesión. La carpeta GroupPolicy está oculta.

KCotreau
fuente
1
Prefiero este método a ponerlo en la carpeta de inicio. Lo hace más permanente.
Joe Taylor
1
@ Joe Taylor Gracias. Para ser honesto, solo uso la carpeta de Inicio para cosas como iniciar Outlook. Esta es una forma más estándar de hacerlo desde el punto de vista de la administración del sistema.
KCotreau
@KContreau, su solución es muy útil, pero no para ese caso.
Probé
@kokbira La pregunta original era simplemente "¿Cómo ejecutar un script al inicio en XP?", que creo que respondí con precisión. Editó y agregó la parte "por ejemplo, y doskey ls = dir" después.
KCotreau
1
@KContreau, tienes razón, el problema es que el título de esta pregunta no es correcto. En "Aclaración", dijo que quiere "ejecutar algunos comandos de DOS cuando inicio un indicador de DOS, principalmente para establecer algunos alias ". Para ejecutar algunos comandos cuando se inicia Windows, su solución está bien, pero ejecutar alias no lo está.
kokbira
47

Los alias de comandos son específicos de la ventana de consola en la que los configura, por lo tanto, un script de inicio no funcionará. Puedes hacerlo de esta manera:

  1. Cree un archivo por lotes ( .cmd) con sus comandos de doskey , colóquelo en algún lugar de los Datos de la aplicación.

  2. Configure que se inicie automáticamente cada vez que abra cmd . La configuración está en el Registro:

    • llave: HKCU\SOFTWARE\Microsoft\Command Processor
    • valor: AutoRun
    • tipo: REG_EXPAND_SZ
    • datos: "%AppData%\aliases.cmd"
usuario1686
fuente
1
Esta fue una gran solución para un sistema operativo virtual Win2K donde quería que el símbolo del sistema cargara siempre mis rutas de compilación. La única diferencia fue el uso de REG_SZ en lugar de REG_EXPAND_SZ
James
Esta es una buena solución. Por casualidad, ¿hay alguna forma de suprimir la salida inicial?
nburr
1
@Nickolas: ¿Solo redirige los comandos a NUL como siempre?
user1686
Esto funciona maravillosamente SIN EMBARGO, puede interferir con el compilador de recursos de Windows (rc.exe) causando errores como "El sistema no puede encontrar la ruta especificada". Ver Visual Studio Shell El proyecto aislado no se compila .
Usuario5910
if exist "%AppData%\aliases.cmd" "%AppData%\aliases.cmd"
Arreglé
4

Los diferentes intérpretes de comandos manejan los alias de comandos de diferentes maneras.

El CMD de Microsoft se basa en el subsistema de consola Win32 para proporcionar su mecanismo de alias de comando. El doskeycomando en realidad interactúa con la consola del proceso, y es la consola misma la que contiene los alias. Por lo tanto, los alias son por consola y transitorios.

El TCC / LE de JP Software maneja los alias por sí mismo. El aliascomando le permite a uno ver y manipular alias, que son "locales" o "globales". Los alias siguen siendo transitorios, pero son privados para un proceso de intérprete de comandos o compartidos entre todos los procesos de intérprete de comandos (en todas las consolas).

Shells como el shell Korn en el kit de herramientas de la utilidad SFUA , cuyas herramientas se ejecutan en el subsistema para aplicaciones basadas en UNIX que viene en la caja con Windows 7 Ultimate Edition y Windows Server 2008 R2 (para Windows XP, uno puede descargar e instalar Servicios para UNIX versión 3.5 .) - y el shell Bourne Again de cygwin maneja de manera similar los alias. Los alias son transitorios, y por proceso de intérprete de comandos.

La carga automática de un conjunto inicial predeterminado de alias también varía según el intérprete de comandos.

En todos los casos, uno coloca comandos para establecer los alias en un script de algún tipo.

grawityya ha dado una de las dos claves de registro que hacen que el CMD de Microsoft ejecute un comando cuando se inicia . Desafortunadamente, esto es por proceso de intérprete de comandos, a pesar de que los alias se almacenan por consola . Inicie un intérprete de comandos secundario desde el inicial y se restablecerán los cambios manuales a los alias predeterminados. Una alternativa, que al menos realiza la inicialización solo una vez por consola, es agregar la /Kopción y el nombre de un script de comando que llama doskeya la cola del comando en el acceso directo que inicia el intérprete de comandos.

El TCC / LE de JP Software ejecuta automáticamente el TCSTARTscript cuando se inicia. De nuevo, esto es por proceso de intérprete de comandos. Sin embargo, los alias "locales" de TCC también son por proceso de intérprete de comandos, por lo que este es el lugar correcto para inicializar alias si uno está empleando alias locales. Para los alias globales, simplemente cree un acceso directo en su Startupcarpeta que cargue los alias de un archivo (con alias /r) y luego ejecute el shraliascomando para que persistan después de que el acceso directo haya terminado de ejecutarse.

Para los proyectiles Bourne Again y Korn, simplemente haga lo que haría con estos proyectiles en cualquier otra plataforma. Utilice el aliascomando en los scripts $HOME/.profiley $HOME/.bashrcpara el shell Bourne Again; y use el aliascomando en $HOME/.profile, ENV y $HOME/.kshrcscripts para el shell Korn.

JdeBP
fuente
2

La respuesta de Gravity funcionó muy bien para mí.

Creé un script shell-aliases.cmd en mi carpeta Documentos (en algún lugar lo puedo encontrar más adelante).

Luego creó el valor de cadena expandible 'AutoRun' en la clave de registro:

'HKEY_CURRENT_USER \ Software \ Microsoft \ Command Processor'

Establezca el valor en la ruta completa al archivo de alias (el mío estaba en 'C: \ Users \ Lee \ Documents \ shell-aliases.cmd').

Una vez que volví a cargar el símbolo del sistema, mis alias de doskey funcionaron. Además, mi archivo de alias es fácilmente accesible y está listo para editar, ya que pienso en más para agregar.

lee8oi
fuente
0

Hay varias ubicaciones que funcionarán, pero el menú de inicio> carpeta de inicio probablemente sea el más fácil.

Ejecute 'msconfig' y vea qué programas se inician y por qué. Simplemente puede agregar su programa a una de esas listas (por ejemplo, en el registro).

Konerak
fuente
0

El problema aquí es que si lo hace en el inicio, estas sustituciones solo estarán disponibles en el indicador CMD abierto. Si se cierra, todas estas sustituciones se perderán y deberán realizarse nuevamente para cada comando abierto.

Entonces, algunas formas alternativas (puede combinarlas):

I. Cree un lote y un acceso directo:

  1. Cree un lote con estas macros y guárdelo en algún lugar conocido (por ejemplo, c: \ apps \ mycmd.bat).
  2. Cree un acceso directo en el escritorio (o donde desee) poniendo "cmd / k" antes de su ruta (por ejemplo, "cmd /kc:\apps\mycmd.bat").
  3. Por lo tanto, todos sus comandos se ejecutarán cada vez que abra ese acceso directo.

II Cree un lote y una entrada en la variable de entorno PATH:

  1. Cree un lote con estas macros y guárdelo en algún lugar conocido (por ejemplo, c: \ apps \ mycmd.bat).
  2. Vaya a Panel de control> Sistema> Configuraciones avanzadas> Avanzado> Variables de entorno.
  3. En las entradas de Usuario o Sistema, busque una variable llamada RUTA. Haga doble clic en él y, al final, inserte ";" y la ruta a su BAT (por ejemplo, "c: \ apps \" => "previous_string; c: \ apps \"), luego Ok y Ok.
  4. Entonces, cuando use un cmd (o en un archivo BAT), simplemente coloque el nombre de un BAT en la ruta creada (por ejemplo, "c: \ apps") para ejecutar sus comandos (por ejemplo, escriba "myapps" para ejecutar esos comandos de sustitución).
kokbira
fuente
1
Intenté "iniciar / separar" pero solo guarda la variable de entorno (no las sustituciones del comando doskey) ... El comando "set" también es válido solo para el indicador abierto, pero podemos usar "setx" para guardarlo en el sistema o variables de entorno del usuario "para siempre". No sé si hay una manera de guardar las sustituciones de doskey "para siempre" en el sistema o para cada inicio de Windows. Prefiero usar mis formas ...
kokbira