2008-10-13 21 views
127

Estoy tratando de escribir un script cmd de Windows para realizar varias tareas en serie. Sin embargo, siempre se detiene después del primer comando en el script.Ejecutando múltiples comandos desde un script cmd de Windows

El comando que detiene después es una creación maven (no estoy seguro de si es relevante).

¿Cómo puedo hacer que continúe y ejecute cada tarea a su vez, por favor?

Instalar cualquier software o configurar el registro, etc., está completamente fuera de cuestión; me temo que tiene que funcionar en una instalación vanida de Windows XP.

Idealmente, me gustaría que la secuencia de comandos se cancelara si fallara alguna de las instrucciones, pero eso es "agradable de tener", no esencial.

Gracias.

Respuesta

132

Cuando se llama a otro archivo .bat, creo que es necesario "llamar" al frente de la llamada:

call otherCommand.bat 
+1

Hola, en el script original no estaba llamando a otros archivos .cmd, pero desde entonces he dividido en archivos separados para poder ejecutar cada uno por turno. Por lo tanto, poner una llamada en frente de cada comando parece haber hecho el truco, ¡gracias! –

+0

Esto también funcionó para mí cuando llamé al comando diff de git – Bronumski

+5

De hecho, en Windows, 'mvn' es un archivo .bat por sí mismo, por lo que necesita usar' call' para ello como en 'call mvn install' ; normalmente no es necesario crear un archivo cmd adicional. – jfpoilpret

1

no sé la respuesta directa a su pregunta, pero si lo hace un montón de estos scripts, podría valer la pena aprender un lenguaje más potente como perl. Existen implementaciones gratuitas para Windows (por ejemplo, activestate, cygwin). He encontrado que vale la pena el esfuerzo inicial para mis propias tareas.

Editar:

Como sugiere @Ferruccio, si no se puede instalar software adicional, considere VBScript y/o Javascript. Están integrados en el host de scripting de Windows.

+0

Gracias, pero no puedo instalar ningún software. Ojalá tuviera acceso a algo más poderoso que el lenguaje de scripting de Windows. :-( –

+6

Siempre puede usar vbscript o javascript. Están integrados en el servidor de secuencias de comandos de Windows. – Ferruccio

43

Puede usar el símbolo & & entre los comandos para ejecutar el segundo comando solo si el primero tiene éxito. Más información aquí http://commandwindows.com/command1.htm

+0

Gracias, voy a intentar eso junto con la respuesta aceptada anteriormente. –

+0

Esto detendrá la ejecución del segundo script si la creación de maven falla? –

+0

Ese enlace está roto: "El servidor de fondo no respondió a tiempo. El servidor de aplicaciones está demasiado ocupado y no puede manejar las solicitudes a tiempo." – mc10

25

No estoy seguro de por qué se detiene el primer comando. Si se puede hacer en paralelo, se puede intentar algo así como

start cmd.exe /C 1.bat  
start cmd.exe /C 2.bat 
+6

Use '/ K' en vez de'/C' si desea que el shell permanezca abierto después de que se haya ejecutado su comando. – JellicleCat

+0

No es necesario utilizar 'cmd.exe' y' start', solo 'start x.bat1' funcionará. – user66001

1

Si está ejecutando en Windows puede utilizar el siguiente comando.

Drive:

cd "Script location" 
schtasks /run /tn "TASK1" 
schtasks /run /tn "TASK2" 
schtasks /run /tn "TASK3" 
exit 
19

Me acaban haciendo lo mismo (más o menos) la tarea exacta de la creación de una secuencia de comandos por lotes para ejecutar scripts de prueba de Maven. El problema es que llamar maven scrips con mvn clean install ... es en sí mismo una secuencia de comandos y, por lo tanto, debe hacerse con la instalación de call mvn clean.

Código que trabajará

rem run a maven clean install 
cd C:\rbe-ui-test-suite 
call mvn clean install 
rem now run through all the test scripts 
call mvn clean install -Prun-integration-tests -Dpattern=tc-login 
call mvn clean install -Prun-integration-tests -Dpattern=login-1 

Nota más bien el uso de la llamada. Esto permitirá el uso de scripts maven consecutivos en el archivo por lotes.

0

Tenga en cuenta que no necesita punto y coma en los archivos por lotes. Y la razón por la que necesita usar la llamada es que mvn es un archivo por lotes y los archivos por lotes necesitan llamarse entre ellos, de lo contrario el control no regresa a la persona que llama.

2

Usando dobles símbolos de unión se ejecutará el segundo comando, sólo si la primera tiene éxito:

cd Desktop/project-directory && atom . 

Donde como, usando solamente un símbolo de unión intentará ejecutar ambos comandos, incluso si el primero falla:

cd Desktop/project-directory & atom . 
Cuestiones relacionadas