Verwenden Sie fc.exe in der Batchdatei, um neue Zeilen von alten Zeilen zu trennen

380
Mark Deven

Ich habe zwei Textdateien mount.txtund mount2.txthabe versucht, neue Zeilen (Zeilen, die nicht in mount.txt waren, aber in mount2.txt sind) von alten Zeilen zu trennen (Zeilen, die in mount.txt waren, aber nicht in mount2.txt.) ). Ich weiß, das muss möglich sein mit:

fc mount.txt mount2.txt >out.txt for /F "tokens=*" %%A in (out.txt) do ( ::separate Line) 

Die Ausgabe des Befehls fc sieht folgendermaßen aus:

Comparing files mount.txt and MOUNT2.txt ***** mount ITCMDLogo CBS ***** MOUNT2 Logo ITCMDSecondLogo CBS *****  ***** mount MozillaPlugins Acknowledgements ReadMe\Palemoon-Portable-license.txt ***** MOUNT2 MozillaPlugins ReadMe\Palemoon-Portable-license.txt ***** 

Ich bin ziemlich unschlüssig, wie ich das genau machen soll, da ich immer noch ein Anfänger von for /fLoops und bin setlocals.

0
Ich habe davon ausgegangen, dass Ihr Titel falsch war und Sie meinten "in" anstatt "ist". Ist das richtig? wenn nicht, korrigieren Sie bitte Ihren Titel, weil es keinen Sinn macht. barlop vor 5 Jahren 1
Ich kenne fc nicht so viel und ich weiß, dass dies ein bisschen unnötig sein könnte, aber es könnte etwas klarer werden. Können Sie den Inhalt jeder Datei angeben? (Ich weiß, dass Ihre Ausgabe von fc möglicherweise den Inhalt jeder Datei angibt, aber es wäre klarer, wenn Sie den Inhalt jeder Datei vor dem Befehl fc enthalten.) barlop vor 5 Jahren 0
Verwenden Sie anstelle von fc `findstr / V / I / B / E / G:mount.txt LotPings vor 5 Jahren 0
Nun, ich habe es mit dieser Datei hier versucht und versucht, ein oder zwei Zeilen zu entfernen und einige zufällige hinzuzufügen: https://1drv.ms/t/s!AlRLV33Rdz2CgrgbGh5l2u5E4o6uYw (Beachten Sie, dass die Ausgabe anders sein wird als mein Beispiel. was ich vereinfacht habe. Die Ausgabe für diese Datei wird Pfade haben). Mark Deven vor 5 Jahren 0

1 Antwort auf die Frage

0
LotPings

Verwenden Sie anstelle von fc findstr mit den Optionen:

 /V Prints only lines that do not contain a match. /I Specifies that the search is not to be case-sensitive. /B Matches pattern if at the beginning of a line. /E Matches pattern if at the end of a line. /G:file Gets search strings from the specified file(/ stands for console). 

Sie können die Optionen mit nur einer zusammenstellen /

> findstr /VIBELG:mount.txt <mount2.txt Logo ITCMDSecondLogo 
Das gab mir eine Reihe von Zeilen, wahrscheinlich um 200, als Antwort, wenn ich weiß, dass es nur 4 Unterschiede gibt. Mark Deven vor 5 Jahren 0
Das sollte nicht passieren, es ist schwierig, einen Grund zu erraten, ohne den Inhalt oder die Kodierung der Datei zu kennen. Es gibt [Einschränkungen bei findstr] (https://stackoverflow.com/questions/8844868/whats-are-the-undocumented-features-and-limitations-of-the-windows-findstr-comman), aber ich habe sie nie getroffen einfache ASCII-Dateien. Vielleicht ist ein GUI-Programm wie [WinMerge] (http://winmerge.org) eine Option für Sie? LotPings vor 5 Jahren 0
Ich habe Backslashes in meinen Dateien, diese Effekte finden sie nicht Mark Deven vor 5 Jahren 0
Ich habe eine Reihe von Möglichkeiten wie findstr und sogar für Loops mit Echo ausprobiert, aber fc ist der einzige Weg, der für 2.000 Zeilendateien aus der Ferne schnell ist und ich weiß, dass die for-Schleife möglich ist. Mark Deven vor 5 Jahren 0
Dann fügen Sie bitte ein / L zu den Switches hinzu, um das Default / R auszuschalten LotPings vor 5 Jahren 0
Das zeigt immer noch eine Reihe von Zeilen mit `findstr / L / I / B / E / V / G:mount.txt Mark Deven vor 5 Jahren 0
Unterstützt das / l Doppelpunkte und Backslashes und Dollarzeichen? Mark Deven vor 5 Jahren 0
Der / L-Schalter findet / vergleicht Strings, wörtlich Zeichen haben keine spezielle RegEx-Bedeutung. Siehe "findstr /?" Oder http://ss64.com/findstr.html LotPings vor 5 Jahren 0