2011-09-06 42 views
46

Tôi đang sử dụng công cụ 'Kết hợp HTML' để so sánh hai tệp HTML. Khi tôi phải so sánh nhiều tập tin, tôi tạo một tập tin thực thi như sau. Ví dụ: tôi chỉ cung cấp năm bộ tệp.Tệp hàng loạt ngừng chạy sau lệnh đầu tiên

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" 

Khi tôi thực thi tệp lô này trong dấu nhắc cmd, chỉ dòng đầu tiên, chỉ 'a1.html', được so sánh và tạo kết quả. Sau đó, thực hiện dừng lại.

Trả lời

84

Thêm call trước các lệnh bạn đang chạy.

Bạn cũng có thể thay đổi điều này với một vòng lặp for, vì vậy:

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 có nghĩa là 'gọi' trước mỗi dòng tôi đã nhất định hoặc chỉ cần gọi xyz.bat? – rajashekar

+1

Tôi có nghĩa là 'gọi' ở phía trước của mỗi dòng bạn đã viết (ngoài có thể là' cd'). – Ben

+0

tên của tệp có thể thay đổi từ định dạng này sang tên khác. là có một cách để đọc tên tập tin nếu đường dẫn thư mục đã được chỉ định và sau đó thực hiện nó cho mỗi tên tập tin – rajashekar

0

Bạn không cần phải chèn dấu ngoặc kép mà không có bất kỳ dấu khoảng trống giữa.

Hãy thử rằng:

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

Có lẽ nó sẽ giải quyết vấn đề của bạn.

+0

không có nó không làm việc – rajashekar

37

Câu trả lời cho vấn đề của bạn là viết CALL HTMLMATCH.EXE {và phần còn lại của tham số}. Chỉ cần sử dụng CALL trước mỗi lệnh thực thi trong tệp lô.

+18

Tôi đã viết tập tin thực thi đầu tiên của tôi trong một cái gì đó như 5 năm nay, và chạy vào cùng một vấn đề này. Trong trường hợp bất cứ ai đang tự hỏi, lý do thêm "gọi" giúp là bởi vì trực tiếp gọi một tập tin batch thứ hai từ bên trong đầu tiên gây ra tập tin batch thứ hai để thay thế đầu tiên bên trong thông dịch viên.Khi tệp hàng loạt thứ hai thoát, trình thông dịch sẽ quên tất cả về tệp lô ban đầu mà bạn đã gọi. Lệnh gọi làm cho trình thông dịch theo dõi vị trí của tập tin bbatch gọi tắt, và quay lại đó khi tệp batch được gọi thoát ra. –

+1

@MarkBessey: Vâng, bạn hoàn toàn đúng khi gọi ** tập tin batch thứ hai ** từ bên trong tập đầu tiên, nhưng đó không phải là trường hợp ở đây vì chương trình được gọi là một .EXE và nó KHÔNG yêu cầu 'CALL' ! – Aacini

+0

Điều này là đúng, nhưng tôi nghĩ rằng nó đáng giá để có giải pháp cho các vấn đề liên quan, vì đây là kết quả mà đi lên bằng cách tìm kiếm ở đây cho các vấn đề phổ biến hơn. Tôi cũng không thể nghĩ ra bất kỳ cách nào khác mà hành vi được mô tả sẽ xảy ra, vì vậy tôi tự hỏi liệu mô tả có thiếu một số chi tiết hay không. –

0

Một ví dụ đơn giản nhưng chính xác: lệnh 1 là cmd/u

Cảm ơn câu hỏi rất hay và câu trả lời ở trên. Tuy nhiên chúng không đủ (có thể là lỗi của tôi) trong trường hợp của tôi, mặc dù nó đơn giản, vì vậy đây là vấn đề của tôi.

Trong thư mục "D: \ MyBak \ Videos" của tôi, tôi có tệp "dir_date_201604.log" liệt kê nội dung của thư mục đó (Tôi đang chạy Windows 7 pro 64bit). Mỗi lần tôi thêm hoặc thay đổi một vài file (s) trong đó "D: \ MyBak \ Videos" thư mục, tôi chạy này "dirDate_201604.BAT" file:

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

Trong một thời gian dài BAT này chỉ có 2 lệnh giữa và nó hoạt động tốt. Tuy nhiên bây giờ tôi đã thêm 2 lệnh "Gọi cmd/u" và "Gọi cmd/a", tệp BAT dừng sau lệnh thứ nhất, "Gọi cmd/u". Tôi đã thử một số lựa chọn thay thế, như xóa 2 "Gọi" ở đầu 2 "cmd" hoặc thay thế chúng bằng 2 "Bắt đầu" hoặc trục xuất 4 lệnh trong 3 tệp BAT riêng biệt; điều này cũng không thành công. Cảm ơn Trước cho bất kỳ ai có giải pháp thực sự hoạt động.

Versailles, Fri Tháng Một 27, 2017 09:41:30 +0100, sửa 10:05:50

Các vấn đề liên quan