Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - сравнение содержимого файлов

Ответить
Настройки темы
PowerShell - сравнение содержимого файлов

Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


всем привет! в powershell пока плохо разбираюсь, но нужно автоматизировать задачу:
есть две директории C:\dir1 и C:\dir2
в dir1 находится текстовый файл, который нужно сравнить с текстовыми файлами из dir2(их порядка тысячи).
результат сравнения(различия в строках файлах) записывать в директорию C:\dir3, при сохранении нужно сохранить имя файла из dir2(чтобы потом оценить результат сравнения).

нашел в интернете скрипт, но он работает только на сравнение двух файлов. как допилить для моих нужд не понимаю.
https://www.mytechnote.ru/article/po...-faylov-skript

был бы весьма признателен за помощь!

Отправлено: 21:49, 04-06-2023

 

Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6491
Благодарности: 1465

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
$sample = gc "C:\dir1\file.txt"

dir "c:\dir2\*.txt" |% {
    if ($diff = diff $sample (gc $_.fullname)) {
        $diff |Out-File "C:\dir3\$($_.name)" -Encoding utf8
    }
}

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)

Это сообщение посчитали полезным следующие участники:

Отправлено: 23:18, 04-06-2023 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Deadooshka


Сообщения: 2482
Благодарности: 671

Профиль | Отправить PM | Цитировать


Compare-Object для текста мало подходит. Он сравнивает объекты, а не текст. В данном случае - массивы объектов-строк. Для текстового анализа есть fc, diff или git diff например.

Отправлено: 15:48, 05-06-2023 | #3


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1171
Благодарности: 487

Профиль | Отправить PM | Цитировать


Цитата Sham:
Compare-Object для текста мало подходит. »
Чойта?
Цитата Sham:
Он сравнивает объекты, а не текст »
Он сравнивает то, что ему укажешь... кроме того, есть же документация официальная...
Вот, Пример №1
такшта зачем "воду баламутить"?

-------
scio me nihil scire. Ѫ


Отправлено: 18:08, 05-06-2023 | #4


Deadooshka


Сообщения: 2482
Благодарности: 671

Профиль | Отправить PM | Цитировать


Надо отличать сравнение объектов типа System.String от посимвольного анализа текста с учётом позиции символов. gc возвращает по умолчанию массив строк, которые потом сравниваются в Compare-Object как IComparable. Если в gc указать -raw, то это уже не будет работать. Для простых случаев построчного сравнения без сохранения позиции строки это годится, но для анализа изменений например в самой строке (внутри объекта типа System.String) уже не подойдёт.

Отправлено: 20:12, 05-06-2023 | #5


Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата DJ Mogarych:
$sample = gc "C:\dir1\file.txt"
dir "c:\dir2\*.txt" |% {
if ($diff = diff $sample (gc $_.fullname)) {
$diff |Out-File "C:\dir3\$($_.name)" -Encoding utf8
}
} »

Спасибо! Работает как часы!

Если нужно из сравниваемых файлов удалять первые 8 символов, то должен ли сработать тут TrimStart()?

Отправлено: 21:30, 05-06-2023 | #6


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6491
Благодарности: 1465

Профиль | Отправить PM | Цитировать


Из названий или откуда?

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 08:57, 06-06-2023 | #7


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1171
Благодарности: 487

Профиль | Отправить PM | Цитировать


Цитата Sham:
Надо отличать »
к чему тут весь этот "ликбез"? ТС-у, что требовалось сравнить? Вот от печки и пляшите...
это раз.

Цитата Sham:
для анализа изменений например в самой строке (внутри объекта типа System.String) уже не подойдёт. »
Чойта, дубль два? Строка у нас, что-то несусветно особенное, что ли? Нет же, это всего лишь, массив символов... вот массивы и надо сравнивать:
Код: Выделить весь код
diff 'abcd'.tochararray() 'abce'.tochararray()
и все различия найдутся...
это два.

А если сравнивать надо слова, то и подавать на сравнение, надо массивы слов... зачем усложнять то, что усложнений не требует?
а это три.

-------
scio me nihil scire. Ѫ


Отправлено: 21:06, 06-06-2023 | #8


Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата DJ Mogarych:
Из названий или откуда? »
из каждой строки в файлах директории C:\dir2

Отправлено: 22:26, 06-06-2023 | #9


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6491
Благодарности: 1465

Профиль | Отправить PM | Цитировать


Да, сработает.
Код: Выделить весь код
if ($diff = diff $sample (gc $_.fullname).TrimStart()) {

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)

Это сообщение посчитали полезным следующие участники:

Отправлено: 23:10, 06-06-2023 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - сравнение содержимого файлов

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Сравнение содержимого 2х текстовых файлов, с выводом отчета bionicmon Скриптовые языки администрирования Windows 3 23-11-2015 18:16
CMD/BAT - Сортировка файлов взависимости от содержимого Mushroomhead Скриптовые языки администрирования Windows 6 26-07-2014 18:49
CMD/BAT - [решено] Сравнение содержимого папок и копирование недостающих файлов Laertes Скриптовые языки администрирования Windows 8 14-05-2013 11:34
PowerShell - [решено] Сравнение содержимого двух CSV файлов dosperados Скриптовые языки администрирования Windows 7 31-01-2012 10:47
CMD/BAT - [решено] Сортировка файлов с учетом содержимого Grammaton Cleric Скриптовые языки администрирования Windows 1 16-11-2011 08:43




 
Переход