Используйте fc.exe в командном файле, чтобы отделить новые строки от старых.

335
Mark Deven

У меня есть два текстовых файла mount.txtиmount2.txt я пытался отделить новые строки (строки, которые не были в mount.txt, но находятся в mount2.txt) от старых строк (строки, которые были в mount.txt, но не в mount2.txt ). Я знаю, что это должно быть возможно с чем-то вроде:

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

Вывод команды fc выглядит следующим образом:

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 ***** 

Я не совсем понимаю, как именно это делать, так как я все еще очень начинающий в for /fпетлях и setlocals.

0
я предположил, что ваш заголовок был ошибочным, и вы имели в виду «в», а не «есть», это правильно? если нет, пожалуйста, исправьте ваш заголовок, потому что это не имеет смысла. barlop 5 лет назад 1
Я не так много знаю fc, и я знаю, что это может быть немного ненужно, но может сделать это немного яснее. Можете ли вы включить содержимое каждого файла? (Я знаю, что ваш вывод fc может указывать содержимое каждого файла, но было бы понятнее, если бы вы включили содержимое каждого файла перед командой fc) barlop 5 лет назад 0
Вместо fc используйте `findstr / V / I / B / E /G:mount.txt LotPings 5 лет назад 0
Ну, я попробовал это с этим файлом здесь, и попытался просто удалить одну или две строки и добавить несколько случайных: https://1drv.ms/t/s!AlRLV33Rdz2CgrgbGh5l2u5E4o6uYw (обратите внимание, что вывод будет отличаться от моего примера, который я упростил. Выход для этого файла будет иметь пути). Mark Deven 5 лет назад 0

1 ответ на вопрос

0
LotPings

Вместо fc используйте findstr с параметрами:

 /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). 

Вы можете собрать варианты только с одним /

> findstr /VIBELG:mount.txt <mount2.txt Logo ITCMDSecondLogo 
Это дало мне несколько строк, примерно 200, в ответ, когда я знаю, что есть только 4 различия. Mark Deven 5 лет назад 0
Этого не должно быть, трудно угадать / объяснить причину, не зная содержимого файла или кодировки. Существуют [ограничения с помощью findstr] (https://stackoverflow.com/questions/8844868/what-are-the-undocumented-features-and-limitations-of-the-windows-findstr-comman), но я никогда не встречал их простые файлы ascii. Может быть, вам подойдет такая графическая программа, как [WinMerge] (http://winmerge.org)? LotPings 5 лет назад 0
У меня есть обратная косая черта в моих файлах, те эффект findstr они не Mark Deven 5 лет назад 0
Я пробовал несколько способов, таких как findstr и даже для циклов с echo, но fc - это единственный способ, позволяющий дистанционно быстро обрабатывать 2000 строк, и я знаю, что цикл for возможен. Mark Deven 5 лет назад 0
Затем, пожалуйста, добавьте / L к переключателям, чтобы отключить / R по умолчанию LotPings 5 лет назад 0
Это все еще показывает кучу строк с `findstr / L / I / B / E / V /G:mount.txt Mark Deven 5 лет назад 0
/ l поддерживает двоеточия, обратную косую черту и знаки доллара? Mark Deven 5 лет назад 0
Ключ / L находит / сравнивает строки, буквально символы не имеют никакого специального значения RegEx. Смотрите `findstr /?` Или http://ss64.com/findstr.html LotPings 5 лет назад 0