В Powershell не работает сравнение двух текстовых файлов - PullRequest
0 голосов
/ 07 мая 2020

Я пытаюсь сравнить содержимое двух текстовых файлов и выводить на консоль только различия.

Первый текстовый файл основан на именах файлов в папке. $AsyFolder = Get-ChildItem -Path .\asy-data -Name

Затем я удаляю префикс имени файла, который установлен пользователем и является одинаковым для каждого файла и отделяется от соответствующей информации с помощью da sh.

$AsyFolder| ForEach-Object{$_.Split("-").Replace("$Prefix", "")} | Where-Object {$_}|Set-Content -Path .\templog.txt

Результат выглядит как $ Asyfolder Output

bpm.art
gbr.pdf
asy.pdf
fab.pdf
as1.art
odb.tgz
ccam.cad
read_me_asy.txt

Существует еще один файл, который является ссылкой и содержит суффиксы файлы, которые должны быть там. Это выглядит так: Справочный файл

tpm.art
bpm.art
gbr.pdf
asy.pdf
fab.pdf
as1.art
as2.art
odb.tgz
xyp.txt
ccam.cad

И его содержимое получено с $AsyTemplate = Get-Content -Path C:\Users\asy_files.txt Лог c выглядит следующим образом

$AsyTemplate |
    ForEach-Object{
        If(Select-String -Path .\templog.txt -Pattern $_  -NotMatch -Quiet){
           Write-Host "$($_)" 
        }

    }

Я пробовал различные способы настройки templog.txt с помощью -InputObject: использование Get-Content, Get-Content -Raw, переменной, запись массива вручную. Я также попытался удалить -NotMatch и использовать -eq $ False для вывода строки выбора.

Каждый раз, хотя вывод - это просто содержимое asy_files.txt (справочный файл). Кажется, мне все равно, что находится в templog.txt ($ AsyFolder Output).

Я также пробовал использовать метод compare-object / where-object, и он просто говорит, что оба файла совершенно разные.

1 Ответ

0 голосов
/ 08 мая 2020

Спасибо @Lee_Dailey за вашу помощь в выяснении того, как правильно задать вопрос ...

Это закончилось тем, что это был дополнительный пробел (3 табуляции) после символов в справочном файле asy_files.txt. Это был артефакт, откуда я скопировал, и PowerShell видел "as2.art" и "as2.art ". Я не на 100% понимаю, почему это имеет значение, но я обнаружил, что сортировка любых пробелов с /S появляется после символа слова. /W и его удаление заставило работать logi c сравнения. Compare-Object | Where-Object также работал после удаления пробелов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...