2009-03-22 38 views
15

Làm cách nào để có thể so sánh hai tệp trong một tệp lô và thực hiện hành động dựa trên việc chúng có khớp với nhau hay không? Tôi đã thử một cái gì đó như:Làm cách nào để có thể so sánh hai tệp trong một tệp theo lô?

if file1.txt NEQ file2.txt goto label 

nhưng nó so sánh chuỗi thực tế "file1.txt" thay vì tệp. Tôi đã đọc về lệnh COMP, nhưng nó dường như không hoạt động nếu tôi đặt nó trong một câu lệnh if. Có ai biết làm thế nào để làm điều này? Xin lỗi, nhưng tôi hiếm khi sử dụng các tập tin batch và có ít kinh nghiệm trong chúng.

Xin cảm ơn trước.

Trả lời

27

Tôi tin rằng bạn có thể sử dụng "FC" lệnh và sau đó kiểm tra errorlevel. Dưới đây là một số mã:

@echo off 
:main 
fc c:\filename r:\filemame > nul 
if errorlevel 1 goto error 

:next 
echo insert next CD 
pause 
goto main 

:error 
echo failed check 

(Kéo từ http://www.computing.net/answers/dos/batch-file-command/15753.html)

+0

Tôi cũng khuyên bạn nên kiểm tra errorlevel 2, đó là dấu hiệu cho thấy có lỗi xảy ra (một trong các tệp không thể mở, lỗi đĩa, v.v.). – LogicDaemon

+0

Bạn có thể làm rõ - không errorlevel 0 có nghĩa là giống nhau, errorlevel 1 có nghĩa là khác nhau? Hoặc ngược lại? –

+1

@CraigMcQueen Lấy từ [Tham chiếu dòng lệnh] (http://ss64.com/nt/fc.html): "-1: Cú pháp không hợp lệ (ví dụ: chỉ một tệp được chuyển); 0: Các tệp giống hệt nhau .; 1 : Các tệp khác nhau .; 2: Không thể tìm thấy ít nhất một trong các tệp. " – Linkyu

3

Có vẻ như chương trình COMP thực sự khá dễ sử dụng. Xem this question trên các câu trả lời của Yahoo.

Lưu ý rằng chạy comp /? sẽ in văn bản trợ giúp cho chương trình (cũng như chỉ định đối số /? với bất kỳ chương trình dòng lệnh Windows gốc nào). Điều này xuất ra cùng văn bản bạn thấy trong câu trả lời của câu hỏi được liên kết ở trên.

Nội dung từ các trả lời Yahoo:

C:\>comp /? 
Compares the contents of two files or sets of files. 

COMP [data1] [data2] [/D] [/A] [/L] [/N=number] [/C] [/OFF[LINE]] 

data1 Specifies location and name(s) of first file(s) to compare. 
data2 Specifies location and name(s) of second files to compare. 
/D Displays differences in decimal format. 
/A Displays differences in ASCII characters. 
/L Displays line numbers for differences. 
/N=number Compares only the first specified number of lines in each file. 
/C Disregards case of ASCII letters when comparing files. 
/OFF[LINE] Do not skip files with offline attribute set. 

To compare sets of files, use wildcards in data1 and data2 parameters. 
+1

các nhà quan sát của câu trả lời đó, lưu ý rằng 'comp' có vấn đề: sau mỗi lần so sánh, nó tương tác yêu cầu người dùng nếu anh ta muốn so sánh nhiều tệp hơn. Và không có chuyển đổi để tắt truy vấn đó, vì vậy lựa chọn tốt nhất là để 'echo N | comp file1 file2'. Nếu không, comp nhanh hơn vì nó so sánh kích thước trước và dừng so sánh sau khi hiển thị 10 khác biệt và có thể so sánh các nhóm tệp bằng mặt nạ. Mặt khác, 'FC' so sánh các tệp đầy đủ mặc dù kích thước, hiển thị tất cả các khác biệt và cố gắng đồng bộ hóa cho các điểm tương đồng trên các offset khác nhau (như khác biệt unix). – LogicDaemon

0

tôi sử dụng ví dụ dưới đây để xây dựng báo cáo dựa trên sự khác biệt file:

set %Batch_Work_Space_Dir%=folder for your batch file and temp resource files 
set file_1=name of file 
set file_2=name of file 

fc %file_1% %file_1%t > %Batch_Work_Space_Dir%\Are_They_Different.txt 

powershell -command "(Get-Content %Batch_Work_Space_Dir%\Are_They_Different.txt) | select -skip 1 | Set-Content %Batch_Work_Space_Dir%\Are_They_Different.txt" 
set /p Diff_Found=<%Batch_Work_Space_Dir%\Are_They_Different.txt 
if %Diff_Found:~0,17%" == "FC: no difference" (
    execute commands 
) 
Các vấn đề liên quan