![]() |
сравнение содержимого файлов
всем привет! в powershell пока плохо разбираюсь, но нужно автоматизировать задачу:
есть две директории C:\dir1 и C:\dir2 в dir1 находится текстовый файл, который нужно сравнить с текстовыми файлами из dir2(их порядка тысячи). результат сравнения(различия в строках файлах) записывать в директорию C:\dir3, при сохранении нужно сохранить имя файла из dir2(чтобы потом оценить результат сравнения). нашел в интернете скрипт, но он работает только на сравнение двух файлов. как допилить для моих нужд не понимаю. https://www.mytechnote.ru/article/po...-faylov-skript был бы весьма признателен за помощь! |
Код:
$sample = gc "C:\dir1\file.txt" |
Compare-Object для текста мало подходит. Он сравнивает объекты, а не текст. В данном случае - массивы объектов-строк. Для текстового анализа есть fc, diff или git diff например.
|
|
Надо отличать сравнение объектов типа System.String от посимвольного анализа текста с учётом позиции символов. gc возвращает по умолчанию массив строк, которые потом сравниваются в Compare-Object как IComparable. Если в gc указать -raw, то это уже не будет работать. Для простых случаев построчного сравнения без сохранения позиции строки это годится, но для анализа изменений например в самой строке (внутри объекта типа System.String) уже не подойдёт.
|
Цитата:
Спасибо! Работает как часы! Если нужно из сравниваемых файлов удалять первые 8 символов, то должен ли сработать тут TrimStart()? |
Из названий или откуда?
|
Цитата:
это раз. Цитата:
Код:
diff 'abcd'.tochararray() 'abce'.tochararray() это два. А если сравнивать надо слова, то и подавать на сравнение, надо массивы слов... зачем усложнять то, что усложнений не требует? а это три. :) |
Цитата:
|
Да, сработает.
Код:
if ($diff = diff $sample (gc $_.fullname).TrimStart()) { |
Время: 17:55. |
Время: 17:55.
© OSzone.net 2001-