2011-09-06 19 views
46

Sto utilizzando lo strumento "HTML Match" per confrontare due file HTML. Come devo confrontare molti file, creo un file batch come il followion. Ad esempio, do solo cinque serie di file.Il file batch si interrompe dopo il primo 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" 

Quando eseguire questo file batch in modo rapido, solo la prima riga cmd, cioè, solo 'a1.html', ottiene rispetto e produce un risultato. Quindi l'esecuzione si interrompe.

risposta

84

Aggiungi call davanti ai comandi che stai utilizzando.

È inoltre possibile modificare questo per un ciclo for, quindi:

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

do u significa 'chiamo' davanti a ogni riga che ho dato o semplicemente chiamare xyz.bat? – rajashekar

+1

Voglio dire 'call' davanti a ogni riga che hai scritto (a parte probabilmente il' cd'). – Ben

+0

il nome del file può cambiare da questo formato ad un altro nome. c'è un modo per leggere il nome del file se il percorso della cartella è stato specificato e quindi eseguirlo per ogni nome di file – rajashekar

0

Non è necessario inserire le virgolette in cui non c'è alcun segno di spazio tra.

Prova che:

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

Forse risolverà il problema.

+0

no non funziona – rajashekar

37

La risposta al tuo problema è scrivere CALL HTMLMATCH.EXE {e il resto dei parametri}. Basta usare CALL davanti a ogni comando eseguibile nel file batch.

+18

Ho scritto il mio primo file batch in qualcosa come 5 anni oggi, e mi sono imbattuto in questo stesso problema. Nel caso qualcuno se lo stia chiedendo, la ragione per cui l'aggiunta di "call" aiuta è perché invocando direttamente un secondo file batch dall'interno del primo, il secondo file batch sostituirà il primo nell'interprete.Quando il secondo file batch viene chiuso, l'interprete avrà dimenticato tutto del file batch originale richiamato. Il comando call induce l'interprete a tenere traccia di dove ha lasciato il file bbatch invocante, e vi ritorna quando il file batch chiamato viene chiuso. –

+1

@MarkBessey: Sì, hai assolutamente ragione quando invochi ** un secondo file batch ** all'interno del primo, ma non è il caso qui perché il programma invocato è un .EXE e NON richiede il 'CALL' ! – Aacini

+0

Questo è vero, ma penso che valga la pena di avere soluzioni ai problemi correlati, poiché questo è il risultato che emerge cercando qui il problema più comune. Inoltre non riesco a pensare a nessun altro modo in cui il comportamento descritto potrebbe accadere, quindi mi chiedo se nella descrizione mancano alcuni dettagli. –

0

Un esempio semplice ma preciso: il primo comando è cmd/u

Grazie per la grande domanda e le risposte di cui sopra. Tuttavia non sono stati sufficienti (forse è colpa mia) nel mio caso, nonostante la sua semplicità, quindi ecco il mio problema.

Nella mia cartella "D: \ MyBak \ Video" ho un file "dir_date_201604.log" che elenca i contenuti di quella cartella (sto utilizzando Windows 7 Pro 64 bit). Ogni volta che posso aggiungere o cambiare alcune file (s) in quella "D: \ MyBak \ Video" cartella, corro questo file "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 

Per molto tempo questa BAT aveva solo i 2 comandi di mezzo e ha funzionato bene. Comunque ora che ho aggiunto i 2 comandi "Call cmd/u" e "Call cmd/a", il file BAT si ferma dopo il primo comando, "Call cmd/u". Ho provato un certo numero di alternative, come rimuovere il 2 "Call" all'inizio del 2 "cmd" o sostituirli con 2 "Start", o deportare i 4 comandi in 3 file BAT separati; anche questo fallisce. Grazie In anticipo a chiunque abbia una soluzione che funzioni effettivamente.

Versailles, Ven 27 Gen 2017 09:41:30 +0100, a cura 10:05:50

Problemi correlati