2011-09-06 11 views
46

Estoy usando la herramienta 'Combinación HTML' para comparar dos archivos HTML. Como tengo que comparar muchos archivos, creo un archivo por lotes como el siguiente. Por ejemplo, doy solo cinco conjuntos de archivos.El archivo por lotes deja de ejecutarse después del primer comando

cd "C:\Program Files\HTML Match" 
HTMLMATCH.EXE "D:\Raj\compare1\a1.html" "D:\Raj\compare2\a1.html" "D:\Raj\compare_res\a1.html" 
HTMLMATCH.EXE "D:\Raj\compare1\a2.html" "D:\Raj\compare2\a2.html" "D:\Raj\compare_res\a2.html" 
HTMLMATCH.EXE "D:\Raj\compare1\a3.html" "D:\Raj\compare2\a3.html" "D:\Raj\compare_res\a3.html" 
HTMLMATCH.EXE "D:\Raj\compare1\a4.html" "D:\Raj\compare2\a4.html" "D:\Raj\compare_res\a4.html" 
HTMLMATCH.EXE "D:\Raj\compare1\a5.html" "D:\Raj\compare2\a5.html" "D:\Raj\compare_res\a5.html" 

Cuando ejecuto este archivo por lotes en un cmd rápida, sólo la primera línea, es decir, sólo 'a1.html', los compara y se produce un resultado. Entonces la ejecución se detiene.

Respuesta

84

Agregue call delante de los comandos que está ejecutando.

También puede cambiar esto a un bucle, por lo que:

FOR /L %i in (1,1,5) DO CALL HTMLMATCH.EXE D:\Raj\compare%i%\a%i%.html D:\Raj\compare%i%\a%i%.html D:\Raj\compare_res\a%i%.html 
+0

hacer u significa 'llamada' delante de cada línea que he dado o simplemente llamo xyz.bat? – rajashekar

+1

Me refiero a 'llamar' delante de cada línea que ha escrito (aparte de probablemente el' cd'). – Ben

+0

el nombre del archivo puede cambiar de este formato a otro nombre. ¿Hay alguna forma de leer el nombre del archivo si se especificó la ruta de la carpeta y luego ejecutarlo para cada nombre de archivo? – rajashekar

0

Usted no tiene que insertar comillas donde no hay ninguna marca espacio entre.

Trate de que:

HTMLMATCH.EXE D:\Raj\compare1\a1.html D:\Raj\compare2\a1.html D:\Raj\compare_res\a1.html 

Tal vez va a resolver su problema.

+0

no está funcionando – rajashekar

37

La respuesta a su problema es escribir CALL HTMLMATCH.EXE {y el resto de los parámetros}. Simplemente use CALL en frente de cada comando ejecutable en el archivo por lotes.

+18

Escribí mi primer archivo por lotes en algo así como 5 años hoy, y me encontré con este mismo problema. En caso de que alguien se pregunte, la razón por la que se agrega "llamar" es porque invocar directamente un segundo archivo por lotes desde el primero hace que el segundo archivo por lotes reemplace al primero dentro del intérprete.Cuando sale el segundo archivo por lotes, el intérprete se habrá olvidado por completo del archivo original por lotes que invocó. El comando de llamada hace que el intérprete realice un seguimiento de dónde quedó el archivo bbatch invocado y lo devuelve cuando sale el archivo por lotes llamado. –

+1

@MarkBessey: Sí, tiene toda la razón al invocar ** un segundo archivo por lotes ** desde el primero, pero ese no es el caso aquí porque el programa invocado es un .EXE y NO requiere el 'CALL' ! – Aacini

+0

Esto es cierto, pero creo que vale la pena tener soluciones a problemas relacionados, ya que este es el resultado que surge al buscar aquí el problema más común. Tampoco puedo pensar en ninguna otra forma en que el comportamiento descrito ocurra, entonces me pregunto si a la descripción le falta algún detalle. –

0

Un ejemplo sencillo pero preciso: la primera orden es cmd/u

Gracias por la gran pregunta y respuestas anteriores. Sin embargo, no fueron suficientes (quizás mi culpa) en mi caso, a pesar de su simplicidad, así que este es mi problema.

En mi carpeta "D: \ MyBak \ Videos" tengo un archivo "dir_date_201604.log" que muestra el contenido de esa carpeta (estoy ejecutando Windows 7 pro de 64 bits). Cada vez que añadir o modificar un archivo (s) que pocos en "D: \ MyBak \ vídeos" carpeta, que lleva este archivo "dirDate_201604.BAT":

Call cmd /u 
dir /od /tw > dir_date_201604_2tb.log 
copy dir_date_201604_2tb.log C:\My\DL 
Call cmd /a 

Durante mucho tiempo esta MTD sólo tenía los 2 comandos intermedios y funcionó bien. Sin embargo, ahora que agregué los 2 comandos "Llamar cmd/u" y "Llamar cmd/a", el archivo BAT se detiene después del 1er comando, "Llamar cmd/u". Probé varias alternativas, como quitar 2 "Llamar" al comienzo de los 2 "cmd" o reemplazarlos por 2 "Comenzar", o deportar los 4 comandos en 3 archivos BAT separados; esto también falla Gracias de antemano a cualquier persona que tenga una solución que realmente funcione.

Versalles, vie 27 ene 2017 09:41:30 +0100, editado 10:05:50

Cuestiones relacionadas