Comando para ejecutar un archivo .bat

Intento que mi script de construcción de Visual Studio ejecute un archivo .bat que hace algo importante.

Esto es lo que quiero hacer ahora mismo:

cd "F:\- Big Packets -\kitterengine\Common\" Template.bat 

Pero no funciona.

Tengo que hacer esto para que funcione:

 cd "F:\- Big Packets -\kitterengine\Common\" F: Template.bat 

Pero esto es bastante difícil de agregar al script de Visual Studio.

¿Cómo puedo hacer esto en una sola línea?

Puede consultar aquí: https://ss64.com/nt/start.html

 start "" /DF:\- Big Packets -\kitterengine\Common\ /W Template.bat 

"F:\- Big Packets -\kitterengine\Common\Template.bat" tal vez precedido por una call (ver call /? ). O Cd /d "F:\- Big Packets -\kitterengine\Common\" & Template.bat .


Hoja de trucos CMD

  • Cmd.exe

  • Obteniendo ayuda

  • Puntuación

  • Nombrar archivos

  • Iniciando progtwigs

  • Llaves

CMD.exe

Lo primero que debe recordar es una forma de operar una computadora. Es la forma en que lo hacíamos antes de que WIMP (Windows, íconos, mouse, menús emergentes) se volviera común. Debe sus raíces a CPM, VMS y Unix. Se usó para iniciar progtwigs y copiar y eliminar archivos. También puedes cambiar la hora y la fecha.

Para obtener ayuda sobre cómo iniciar CMD, escriba cmd /? . Debe iniciarlo con el /k o /c menos que solo desee escribirlo.

Obteniendo ayuda

Para ayuda general. Escriba Help en el símbolo del sistema. Para cada comando enumerado, escriba help (por ejemplo, help dir ) o /? (por ejemplo, dir /? ).

Algunos comandos tienen subcomandos. Por ejemplo, schtasks /create /? .

La ayuda del comando NET es inusual. Typing net use /? es una breve ayuda. Escriba net help use para obtener ayuda completa. Lo mismo aplica en la raíz – net /? También es una ayuda breve, use net help .

Las referencias en Ayuda al nuevo comportamiento describen cambios de CMD en OS / 2 y Windows NT4 a la CMD actual que está en Windows 2000 y posterior.

WMIC es un comando multipropósito. Escriba wmic /? .


Puntuación

 & seperates commands on a line. && executes this command only if previous command's errorlevel is 0. || (not used above) executes this command only if previous command's errorlevel is NOT 0 > output to a file >> append output to a file < input from a file 2> Redirects command error output to the file specified. (0 is StdInput, 1 is StdOutput, and 2 is StdError) 2>&1 Redirects command error output to the same location as command output. | output of one command into the input of another command ^ escapes any of the above, including itself, if needed to be passed to a program " parameters with spaces must be enclosed in quotes + used with copy to concatinate files. EG copy file1+file2 newfile , used with copy to indicate missing parameters. This updates the files modified date. EG copy /b file1,, %variablename% a inbuilt or user set environmental variable !variablename! a user set environmental variable expanded at execution time, turned with SelLocal EnableDelayedExpansion command % (%1) the nth command line parameter passed to a batch file. %0 is the batchfile's name. %* (%*) the entire command line. %CMDCMDLINE% - expands to the original command line that invoked the Command Processor (from set /?). % or %% (%A or %%A) the variable in a for loop. Single % sign at command prompt and double % sign in a batch file. \\ (\\servername\sharename\folder\file.ext) access files and folders via UNC naming. : (win.ini:streamname) accesses an alternative steam. Also separates drive from rest of path. . (win.ini) the LAST dot in a file path separates the name from extension . (dir .\*.txt) the current directory .. (cd ..) the parent directory \\?\ (\\?\c:\windows\win.ini) When a file path is prefixed with \\?\ filename checks are turned off. 

Nombrar archivos

 < > : " / \ | Reserved characters. May not be used in filenames. Reserved names. These refer to devices eg, copy filename con which copies a file to the console window. CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, and LPT9 CONIN$, CONOUT$, CONERR$ -------------------------------- Maximum path length 260 characters Maximum path length (\\?\) 32,767 characters (approx - some rare characters use 2 characters of storage) Maximum filename length 255 characters 

Comenzando un progtwig

Ver start /? y call /? por ayuda en las tres formas.

Hay dos tipos de progtwigs de Windows: consola o no consola (estos se denominan GUI incluso si no tienen uno). Los progtwigs de la consola se conectan a la consola actual o Windows crea una nueva consola. Los progtwigs de GUI tienen que crear explícitamente sus propias ventanas.

Si no se proporciona una ruta completa, Windows mira

  1. El directorio desde el que se cargó la aplicación.

  2. El directorio actual para el proceso principal.

  3. Windows NT / 2000 / XP: el directorio del sistema de Windows de 32 bits. Use la función GetSystemDirectory para obtener la ruta de este directorio. El nombre de este directorio es System32.

  4. Windows NT / 2000 / XP: el directorio del sistema de Windows de 16 bits. No hay ninguna función que obtenga la ruta de este directorio, pero se busca. El nombre de este directorio es Sistema.

  5. El directorio de Windows. Use la función GetWindowsDirectory para obtener la ruta de este directorio.

  6. Los directorios que se enumeran en la variable de entorno PATH.

Especifique un nombre de progtwig

Esta es la manera estándar de comenzar un progtwig.

 c:\windows\notepad.exe 

En un archivo por lotes, el lote esperará a que el progtwig salga. Cuando se escribe, el símbolo del sistema no espera a que salgan los progtwigs gráficos.

Si el progtwig es un archivo por lotes, se transfiere el control y el rest del archivo de proceso por lotes no se ejecuta.

Use el comando de inicio

Start inicia los progtwigs de formas no estándar.

 start "" c:\windows\notepad.exe 

Start inicia un progtwig y no espera. Los progtwigs de la consola comienzan en una nueva ventana. El uso del modificador /b fuerza a los progtwigs de consola a la misma ventana, lo que anula el objective principal de Iniciar.

Start utiliza el shell gráfico de Windows, lo mismo que escribir en WinKey + R (diálogo Ejecutar). Tratar

 start shell:cache 

También los nombres de los progtwigs registrados en HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths también se pueden escribir sin especificar una ruta completa.

También tenga en cuenta que el primer conjunto de comillas, si corresponde, DEBE ser el título de la ventana.

Use el comando Llamar

La llamada se usa para iniciar los archivos por lotes y esperar a que salgan y continúen el archivo por lotes actual.

Otros nombres de archivos

Escribir un nombre de archivo no de progtwig es lo mismo que hacer doble clic en el archivo.


Llaves

Ctrl + C sale de un progtwig sin salir de la ventana de la consola.

Para otras teclas de edición, escriba Doskey /? .

  • y comandos de recuperación

  • ESC borra la línea de comando

  • F7 muestra el historial de comandos

  • ALT + F7 borra el historial de comandos

  • F8 busca el historial de comandos

  • F9 selecciona un comando por número

  • ALT + F10 borra las definiciones de macro

También no listado

  • Ctrl + o Mueve una palabra a la vez

  • Ctrl + Retroceso Elimina la palabra anterior

  • Inicio Principio de línea

  • Fin de línea

  • Ctrl + End Elimina al final de línea

Hay muchas posibilidades para resolver esta tarea.

1. EJECUTAR el archivo por lotes con la ruta completa

La solución más fácil es ejecutar el archivo por lotes con la ruta completa.

 "F:\- Big Packets -\kitterengine\Common\Template.bat" 

Una vez que se llega al final del archivo por lotes Template.bat , no hay retorno al script anterior en caso de que la línea de comando anterior esté dentro de un archivo * .bat o * .cmd.

El directorio actual para el archivo por lotes Template.bat es el directorio actual del proceso actual. En caso de que Template.bat requiera que el directorio de este archivo por lotes sea el directorio actual, el archivo por lotes Template.bat debe contener después de @echo off como segunda línea la siguiente línea de comando:

 cd /D "%~dp0" 

Ejecutar en una ventana de símbolo del sistema cd /? para que se muestre la ayuda de este comando que explica el parámetro /D … cambie al directorio especificado también en un disco diferente.

Ejecutar en una ventana de símbolo del sistema call /? para que se muestre la ayuda de este comando usado también en 2., 4. y 5. solución y explicación también %~dp0 … unidad y ruta de argumento 0 que es el nombre del archivo por lotes.

2. LLAME al archivo por lotes con la ruta completa

Otra solución es llamar al archivo por lotes con la ruta completa.

 call "F:\- Big Packets -\kitterengine\Common\Template.bat" 

La diferencia con la primera solución es que una vez que se llega al final del archivo por lotes Template.bat el procesamiento por lotes continúa en un script por lotes que contiene esta línea de comando.

Para el directorio actual, lea arriba.

3. Cambie el directorio y ejecute el archivo por lotes con una línea de comando

Hay 3 operadores para ejecutar comandos múltiples en una línea de comando: & , && y || .
Para más detalles, consulte la respuesta en Línea única con múltiples comandos usando el archivo por lotes de Windows

Sugiero para esta tarea el operador && .

 cd /D "F:\- Big Packets -\kitterengine\Common" && Template.bat 

Como en la primera solución, no hay retorno al script actual si se trata de un archivo * .bat o * .cmd y el cambio del directorio y la continuación del procesamiento por lotes en Template.bat es exitoso.

4. Cambie el directorio y el archivo de proceso por lotes con una línea de comando

Esta línea de comando cambia el directorio y en caso de éxito llama al archivo por lotes.

 cd /D "F:\- Big Packets -\kitterengine\Common" && call Template.bat 

La diferencia con la tercera solución es la vuelta al script por lotes actual al salir del procesamiento de Template.bat .

5. Cambie el directorio y el archivo por lotes CALL para mantener el entorno actual con una línea de comando

Las cuatro soluciones anteriores cambian el directorio actual y se desconoce qué hace Template.bat respecto a

  1. directorio actual
  2. Variables de entorno
  3. estado de extensiones de comando
  4. estado de expansión retardada

En caso de que sea importante mantener el entorno de la secuencia de comandos * .bat o * .cmd actual sin modificar por lo que Template.bat cambie en el entorno por sí mismo, se recomienda utilizar setlocal y endlocal .

Ejecutar en una ventana del símbolo del sistema setlocal /? y endlocal /? para que se muestre la ayuda de estos dos comandos. Y lea la respuesta al cambiar el comando del directorio cd ..no trabajando en el archivo por lotes después de la instalación de npm explicando más detalladamente lo que hacen estos dos comandos.

 setlocal & cd /D "F:\- Big Packets -\kitterengine\Common" & call Template.bat & endlocal 

Ahora solo hay & lugar de && usado, ya que aquí es importante que después de ejecutar setlocal el comando endlocal también se ejecute finalmente.


UNA NOTA MÁS

Si el archivo de proceso por lotes Template.bat contiene el comando exit sin parámetro /B y este comando se ejecuta realmente, el proceso de comando siempre sale independientemente de la jerarquía de llamadas. Así que asegúrese de que Template.bat contenga exit /B o goto :EOF lugar de simplemente exit si se usa exit en absoluto en este archivo por lotes.