Windows เทียบเท่ากับคำสั่ง diff อย่างไร


284

ฉันรู้ว่ามีการโพสต์ที่คล้ายกันนี้: ที่นี่
ฉันพยายามใช้compคำสั่งเหมือนที่กล่าวถึง แต่ถ้าฉันมีสองไฟล์หนึ่งไฟล์ที่มีข้อมูลเช่น "abcd" และอื่น ๆ ที่มีข้อมูล "abcde" มันแค่บอกว่าไฟล์มีขนาดแตกต่างกัน ฉันอยากรู้ว่าพวกเขาต่างกันตรงไหน ใน Unix diff ง่ายบอกฉันว่าแถวและคอลัมน์คำสั่ง comp ใน windows ทำงานอย่างไรถ้าฉันมีบางอย่างเช่น "abd" และ "abc" ไม่อย่างอื่น ความคิดใดที่ฉันสามารถใช้กับสิ่งนี้?

คำตอบ:


461

รันสิ่งนี้ในเชลล์ CMD หรือแบตช์:

FC file1 file2

FC ยังสามารถใช้เพื่อเปรียบเทียบไฟล์ไบนารี:

FC /B file1 file2

3
คุณจะทำสิ่งนี้กับไฟล์ที่เปลี่ยนแปลงทั้งหมดในสองโฟลเดอร์ได้อย่างไร ชอบฉันเปรียบเทียบเนื้อหาของ folder1 กับเนื้อหาของ folder2: มีการเปลี่ยนแปลงบรรทัดใด ๆ ใน folder2 หรือไม่
Wolfpack'08

17
@ Wolfpack'08 ": FC path1\* FC path2\*จะทำการเปรียบเทียบไฟล์ทั้งหมดในโฟลเดอร์path1และpath2หากไฟล์เหล่านั้นมีชื่อเหมือนกันหากมีไฟล์ที่มีชื่อไม่ตรงกัน FC จะรายงานไฟล์ที่หายไป ไม่พบในโฟลเดอร์ที่สองและไม่ใช่วิธีอื่นในการจับคู่ที่ไม่ตรงกันทั้งหมดอาจจำเป็นต้องใช้เทคนิคที่แตกต่างกัน
Andriy M

@AndriyM ดังนั้นไฟล์ใหม่จะทำให้ FC ผิดพลาดโดยไม่ส่งคืนบรรทัดใด ๆ จริงหรือ ข้อความผิดพลาดเท่านั้น?
Wolfpack'08

1
@ Wolfpack'08: ใช่แค่ข้อความเกี่ยวกับคู่ที่ขาดหายไม่มีบรรทัดจากปาร์ตี้ที่มีอยู่ (แต่นั่นจะไม่ยุติการประมวลผลของคู่อื่น ๆ ที่มีอยู่คู่ไฟล์และการเปรียบเทียบของพวกเขาจะยังคงดำเนินการถ้านั่นคือสิ่งที่คุณถาม)
Andriy M

@AndriyM ดังนั้นคุณต้องพูดว่า: "หากเกิดข้อผิดพลาด: files in both directories are diff'd; files in only one directory throw errors." น่าสนใจ แต่แน่นอนว่ามีโปรแกรมบุคคลที่สามที่เทียบเท่ากับ diff?
Wolfpack'08

36

ดีบน Windows ฉันทำงานอย่างมีความสุขdiffและเครื่องมือ GNU อื่น ๆ อีกมากมาย คุณสามารถทำได้ด้วยcygwinแต่โดยส่วนตัวแล้วฉันชอบGnuWin32เพราะมันเป็นประสบการณ์การติดตั้งที่เบากว่ามาก

ดังนั้นคำตอบของฉันคือ Windows เทียบเท่าdiffไม่มีใครอื่นนอกจากdiffตัวเอง!


1
ดูเหมือนว่าการติดตั้งพื้นฐานของ Cygwin จะไม่รวมถึงความแตกต่าง ฉันต้องติดตั้งแพคเกจใดเพิ่มเติมเพื่อรับมัน
Warren Dew

7
ฉันไม่แนะนำ cygwin ฉันจะใช้พอร์ต Win32 ดั้งเดิมของ diff
David Heffernan

1
แพคเกจ @WarrenDew Cygwin diffutilsที่คุณต้องมี ดูcygwin.com/cgi-bin2/…
Steve Pitchers

24

Winmerge มีโปรแกรมอรรถประโยชน์บรรทัดคำสั่งที่อาจคุ้มค่าที่จะเช็คเอาท์

นอกจากนี้คุณสามารถใช้ส่วนกราฟิกของมันได้เช่นกันขึ้นอยู่กับสิ่งที่คุณต้องการ


2
แม้ว่านี่จะไม่ใช่ยูทิลิตี้ Windows ในตัว แต่ฉันขอแนะนำอย่างยิ่ง - เป็นโอเพ่นซอร์สน้ำหนักเบาและปราศจากข้อผิดพลาดจากประสบการณ์ของฉัน
david.barkhuizen

19

อีกหนึ่งทางเลือกในการดาวน์โหลดและติดตั้งคอมไพล์จากที่นี่ จากนั้นเพิ่มเส้นทางไปGit\bin\ยังPATHตัวแปรของคุณ สิ่งนี้จะให้คุณไม่เพียง แต่ต่างกัน แต่ยังมีคำสั่ง linux อื่น ๆ อีกมากมายที่คุณสามารถใช้จากบรรทัดคำสั่ง windows

คุณสามารถตั้งค่าPATHตัวแปรโดยคลิกขวาที่คอมพิวเตอร์และเลือกคุณสมบัติ จากนั้นคุณสามารถคลิกที่การตั้งค่าระบบขั้นสูงทางด้านซ้ายของหน้าจอ ในป็อปอัพคลิกตัวแปรสภาพแวดล้อมจากนั้นเพิ่มหรืออัปเดตตัวแปร PATH ในตัวแปรผู้ใช้ของคุณด้วยGit\bin\

Git diff เอกสาร


@ ไฟร์ไลท์ - ขอบคุณสำหรับคำตอบของคุณ คุณช่วยอธิบายสิ่งที่คุณหมายถึงได้ที่นี่: "จากนั้นเพิ่มเส้นทางไปยัง Git \ bin \ ไปยังตัวแปร PATH ของคุณ"
BKSpurgeon

2
@BKSpurgeon - หากคุณคลิกขวาที่คอมพิวเตอร์และเลือกคุณสมบัติจากนั้นคุณสามารถคลิกที่การตั้งค่าระบบขั้นสูงทางด้านซ้ายของหน้าจอ ในป๊อปอัปให้คลิกตัวแปรสภาพแวดล้อมจากนั้นเพิ่มหรืออัปเดตตัวแปร PATH ในตัวแปรผู้ใช้ของคุณด้วย Git \ bin \
Tim Hutchison Tim

@JustinCormack คุณมีข้อมูลอ้างอิงเกี่ยวกับเรื่องนี้หรือไม่? ฉันเพิ่งลอง diff ใน Git Bash และใช้งานได้
Tim Hutchison

3
@Tim Hutchison จากคำตอบของคุณ: "สิ่งนี้จะทำให้คุณไม่เพียง แต่แตกต่างเท่านั้น แต่ยังมีคำสั่ง linux อื่น ๆ อีกมากมายที่คุณสามารถใช้จากบรรทัดคำสั่ง windows" - อันไหนที่คุณหมายถึง? เมื่อมีการติดตั้ง Git เขา / เธอควรจะมีgit...ไฟล์โปรแกรมที่พร้อมใช้งานจาก PATH นอกจากนี้คำตอบอาจจะรวมเป็นหนึ่งชิ้นสำคัญของข้อมูล: ที่คุณต้องการที่จะเปิดตัวเครื่องมือต่างโดยการเขียนไม่เพียงgit diff diff
Petr Bodnár

เพื่อนนั่นคือทั้งหมดอีกครั้งdiff
vintproykt

14

FC ใช้งานได้ดีโดยในกรณีของฉันมันไม่เป็นประโยชน์เพราะฉันต้องการเพียงแค่บรรทัดที่มีการเปลี่ยนแปลง และ FC ให้ข้อมูลเพิ่มเติมเช่นชื่อไฟล์บรรทัดเดียวกันและการเปรียบเทียบระดับทวิภาคี

    >fc data.txt data.txt.bak   
    ***** DATA.TXT
    ####09
    ####09
    ####09
    ***** DATA.TXT.BAK
    ####09
    ####08
    ####09

แต่ในกรณีของฉันฉันต้องการเฉพาะบรรทัดที่มีการเปลี่ยนแปลงและต้องการให้บรรทัดเหล่านั้นถูกส่งออกไปยังไฟล์อื่นโดยไม่มีส่วนหัวหรือข้อมูลอื่น ๆ

ดังนั้นฉันใช้"findstr"เพื่อเปรียบเทียบไฟล์:

findstr /V /G:data.txt.bak data.txt >DiffResult.txt

ที่ไหน:

data.txt.bak เป็นชื่อของไฟล์เก่า

data.txt เป็นชื่อของไฟล์ใหม่

DiffResult.txt มีข้อมูลที่มีการเปลี่ยนแปลงเช่นหนึ่งบรรทัด #### 09


1
/เพียงบรรทัดแรกและบรรทัดสุดท้ายของบล็อกที่มีการเปลี่ยนแปลง/ Nแสดงหมายเลขบรรทัด
Lukas


10

นอกจากนี้ยังมี Powershell (ซึ่งเป็นส่วนหนึ่งของ Windows) มันไม่รวดเร็ว แต่ยืดหยุ่นได้นี่คือคำสั่งพื้นฐาน ผู้คนเขียน cmdlet และสคริปต์ต่างๆสำหรับมันหากคุณต้องการการจัดรูปแบบที่ดีขึ้น

PS C:\Users\Troll> Compare-Object (gc $file1) (gc $file2)

ไม่ใช่ส่วนหนึ่งของ Windows แต่ถ้าคุณเป็นผู้พัฒนาด้วย Visual Studio มันมาพร้อมกับ WinDiff (กราฟิก)

แต่สิ่งที่ฉันชอบคือ BeyondCompare ซึ่งราคา $ 30


4

DiffUtilsน่าจะเป็นทางออกที่ดีที่สุดของคุณ มันเทียบเท่ากับ diff ของ Windows

สำหรับความรู้ของฉันไม่มีสิ่งใดเทียบเท่าในตัว


ฉันใช้สิ่งนั้นด้วยเช่นกันอย่างไรก็ตามวันนี้ฉันค้นพบว่ารุ่นเก่าที่สวยมากที่ 2.8.7 ที่ให้ไว้ในหน้านั้นมีข้อบกพร่อง (เมื่อเปรียบเทียบไฟล์ PDF บางไฟล์ที่พวกเขารายงานว่าเท่ากัน) ดังนั้นตอนนี้เลือก "git diff" ตามที่แนะนำโดย firelight
anre

4

เหตุผลที่คุณได้รับข้อผิดพลาดกับ COMP คือยูทิลิตี้จะถือว่าไฟล์ที่คุณกำลังเปรียบเทียบมีขนาดเท่ากัน เพื่อเอาชนะว่าคุณสามารถใช้'/n'ตัวเลือกth ที่คุณสามารถระบุจำนวนบรรทัดที่คุณต้องการเปรียบเทียบ (ดูตัวเลือกที่รองรับโดยคอมพ์โดยพิมพ์'comp /?'บนบรรทัดคำสั่งดังนั้นคำสั่งของคุณจะเป็นดังนี้:

C:\>comp "filepath1" "filepath2" /a /l /n=(the number of lines you want to compare) /c 

สิ่งนี้จะช่วยแก้ปัญหาของคุณหากคุณไม่ต้องการใช้คอมพ์ แต่นี่จะเป็นปัญหาสำหรับไฟล์ที่มีขนาดใหญ่จริงๆ

แม้ว่าcompจะเป็นตัวเลือก แต่ฉันรู้สึกว่ามันเป็นแบบดั้งเดิมและFCเป็นตัวเลือกที่ดีกว่า คุณสามารถใช้FORFILESและFCร่วมกันเพื่อสร้างยูทิลิตี้การเปรียบเทียบไฟล์ที่ดีถ้าคุณต้องการมันเป็นประจำ

FC ใช้วิธีนี้ในการอ้างอิง:

C:\>fc /c(case insensistive) /lbn(number of errors allowed before you wanna stop compare) /n(display line number) "filename1" "filename2"

มีตัวเลือกมากมายที่คุณสามารถเห็นได้โดย'fc /?' หวังว่านี่จะช่วยได้



0

windows ที่เทียบเท่ากับคำสั่ง diff คือคำสั่ง fc (File Comapre)

นี่คือขั้นตอนพื้นฐานในการทำเช่นนั้น:
1. เก็บสองไฟล์ไว้ในโฟลเดอร์ (ตัวอย่าง file1.html และ file2.html)
2. พรอมต์คำสั่งเรียกใช้
3. พิมพ์ fc file1Location file2Location

พบรายละเอียดการสอนในเรื่องเดียวกัน:

http://www.howtogeek.com/206123/how-to-use-fc-file-compare-from-the-windows-command-prompt/


0

ฉันไม่รู้ว่าเครื่องมือต่อไปนี้เป็นสิ่งที่คุณต้องการหรือไม่ แต่ฉันชอบที่จะใช้สำหรับไฟล์เฉพาะเครื่องมือออนไลน์บางอย่าง วิธีนี้ฉันสามารถใช้ได้โดยไม่คำนึงถึงระบบปฏิบัติการ นี่คือตัวอย่าง: diffchecker.com

แต่สำหรับความต้องการของฉันฉันเดาว่าเครื่องมือที่ดีที่สุดในการติดตามการเปลี่ยนแปลงและบันทึกของไฟล์ในโครงการของฉันคือ GIT หากคุณทำงานเป็นทีมคุณสามารถมี repo ออนไลน์ในเซิร์ฟเวอร์ของคุณหรือใช้กับ Bitbucket หรือ Github

หวังว่าจะช่วยใครซักคน


0

หากคุณติดตั้ง git บนเครื่องของคุณคุณสามารถเปิด terminal git และใช้diffคำสั่งLinux ตามปกติ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.