Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

I have two text files and want to find the differences between them using Windows Powershell. Is there something similar to the Unix diff tool available? Or is there another other way I haven't considered?

I've tried compare-object, but get this cryptic output:

PS C:\> compare-object one.txt two.txt

InputObject                                                 SideIndicator
-----------                                                 -------------
two.txt                                                     =>
one.txt                                                     <=
share|improve this question
add comment

7 Answers

up vote 38 down vote accepted

Figured it out myself. Because Powershell works with .net objects rather than text, you need to use get-content to expose the contents of the text files. So to perform what I was trying to do in the question, use:

compare-object (get-content one.txt) (get-content two.txt)
share|improve this answer
add comment

Or you could use the DOS 'FC' command like so:

fc.exe filea.txt fileb.txt > diff.txt

fc is an aliase for the Format-Custom cmdlet so be sure to enter the command as fc.exe. Please note that many DOS utilities don't handle UTF-8 encoding

You can also spawn a CMD process and run fc within it.

start cmd "/c ""fc filea.txt fileb.txt >diff.txt"""

This instruct PowerShell to start a process with the 'cmd' program using the parameters in quotes. In the quotes, is the '/c' cmd option to run the command and terminate. the actual command to run by cmd in the process is "fc filea.txt fileb.txt" redirecting the output to the file diff.txt.

You can use the DOS fc.exe from within powershell.

share|improve this answer
1  
+1 for bring out the DOS ^_^ –  Jeff Bridgman Apr 17 '13 at 15:21
add comment

diff on *nix is not part of the shell, but a separate application.

Is there any reason you can't just use diff.exe under PowerShell?

You can download a version from the UnxUtils package (http://unxutils.sourceforge.net/)

share|improve this answer
1  
Because PowerShell is included now, nothing to download and install. –  Bratch Jul 31 '12 at 16:34
add comment

WinMerge is another good GUI-based diff tool.

share|improve this answer
    
This is how I did it in the past, which is a manual process, that I wanted to replace with a small script. –  Bratch Jul 31 '12 at 16:35
add comment

A simpler way of doing it is to write:

diff (cat file1) (cat file2)
share|improve this answer
    
Diff and cat are just aliases for Compare-Object and Get-Content in PowerShell. It is the same thing. –  Shawn Melton Feb 10 '12 at 1:54
add comment

There's also Windiff which provides a GUI diff interface (great for use with GUI based CVS/SVN programs)

share|improve this answer
add comment

compare-object (aka diff alias) is pathetic if you expect it to behave something like a unix diff. I tried the diff (gc file1) (gc file2), and if a line is too long, I can't see the actual diff and more importantly, I can't tell which line number the diff is on.

When I try adding -passthru, I now can see the difference, but I lose which file the difference is in, and I still don't get a line number.

My advice, don't use powershell to find differences in files. As someone else noted, fc works, and works a little better than compare-object, and even better is downloading and using real tools like the unix emulator that Mikeage mentioned.

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.