Есть ли способ получить данные из этого текстового файла в Powershell? - PullRequest
2 голосов
/ 23 марта 2020

Я использую Beyond Compare, и я получил его для вывода, если есть какие-либо различия в текстовом файле. Однако я хочу написать это в powershell, чтобы в случае отсутствия различий в файлах сценарий продолжался и делал что-то еще. Однако я не уверен, что это возможно. Я просмотрел Select-String, но не уверен, сможет ли это сделать то, что я ищу. Прикрепленный файл - это то, как выглядит текстовый файл, когда нет различий, а также как он выглядит, когда есть различия.

Differences No Differences

Можно ли преобразовать имя, размер или изменить текстовый файл в переменную, а затем сделать условие о том, является ли оно нулевым? Или есть другой способ сделать то, что я пытаюсь достичь в Powershell? Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 24 марта 2020

Если все, что вам нужно знать, это , обнаружены ли какие-либо различия, следует сделать следующее:

$noDiffs = '' -eq ((Get-Content -Raw report.txt) -split '\r?\n-+\r?\n')[1].Trim()           
  • (Get-Content -Raw report.txt) -split '\r?\n-+\r?\n разбивает весь входной файл по разделительной линии (----...), следующей за строкой заголовка таблицы, используя регулярное выражение (регулярное выражение).

  • [1] выглядит как 2-й элемент результирующего массива, т. е. все, что идет после разделительной линии, обрезает все начальные и конечные пробелы, и результат проверяется на наличие пустой строки.

0 голосов
/ 25 марта 2020

При всем уважении к вопросу и ответу от @ mklement0.
Использование Beyond Compare в скрипте PowerShell ставит телегу перед лошадью .
Там в PowerShell есть множество командлетов , которые позволят вам легко сравнивать папки (и многое другое), не занимаясь очисткой текста. Как использовать Compare-Object вместе с Get-ChildItem для данного примера:

Compare-Object (Get-ChildItem .\Test) (Get-ChildItem .\Test1) -Property Name, Length, LastWriteTime

Если вы хотите сделать рекурсивное сравнение относительно путь , вы можете сделать:

Compare-Object (Get-ChildItem .\Test -Recurse -Name) (Get-ChildItem .\Test1 -Recurse -Name)

Обратите внимание, что параметр -Name будет отображать только относительный путь строки , если вы также хотите сравнить Length и LastWriteTime Вы можете сделать:

$TestFolder = 'C:\Test'
$Test1Folder = 'C:\Test1'

$TestFiles  = Get-ChildItem $TestFolder  -File -Recurse |
    Select-Object *,@{N='RelativePath'; E={$_.FullName.SubString($TestFolder.Length)}}
$Test1Files = Get-ChildItem $Test1Folder -File -Recurse |
    Select-Object *,@{N='RelativePath'; E={$_.FullName.SubString($Test1Folder.Length)}}

Compare-Object $TestFiles $Test1Files -Property RelativePath,Length,LastWriteTime
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...