Set-Content, а затем Get-Content как-то меняют содержимое - PullRequest
1 голос
/ 29 апреля 2019

PowerShell изменяет содержимое текстового файла на Get-Content или переменную на Set-Content.

Это скрипт PowerShell для компиляции группы файлов и форматирования их в один текстовый файл, эта часть проверяет, равен ли новый файл старому, но, согласно сравнению, никогда не совпадает. Я пробовал возиться с такими вещами, как создание нового var в виде строкового массива, как get-content.

$files = Get-ChildItem -path "./dir" | Where-Object -FilterScript {$_.Name -match '[A-J]'}

$var = @()
foreach ($file in $files){
    $filePath = "dir\" + $file;
    $fileContent = Get-Content $filepath
    $var += $fileContent
}
$firstLine = '"this" "issen" "da" "first"'
$var1 = '"abc" "def" "12" "6"'
$var2 = '"456" "def" "12" "4"'
$newContent = $firstLine,$var,$var1,$var2
$oldContent = Get-Content './File.txt'

if (-not (Compare-Object $oldContent $newContent)) {
    Write-Host Nothing new.
} else {
    Write-Host Something new
    Set-Content './File.txt' -value $newContent
}
Set-Content './File.txt' -value $newContent
pause

При сравнении $newContent с $oldContent, который просто $newContent сохраняется и извлекается из текстового файла, они не идентичны. Они должны быть, верно?

Текстовые файлы, собранные из ./dir, выглядят так: a00.txt

a12 bc23 abc

b00.txt

a12 bc23 abg

1 Ответ

4 голосов
/ 29 апреля 2019

Ваша первая строка $var = "stuff","and","thangs" создает массив (3 строки):

enter image description here

Оператор -eq не работает так длясравнение массивов объектов .Вместо этого вы можете использовать командлет Compare-Object :

if (-not (Compare-Object $var $var2)) {
 Write-Host True
} 

Ответ для редактирования:

Ваша первая переменная ($newContent) представляет собой массив строк, но также включает в себя другой массив строк .См. Здесь:

PS D:\temp> $newContent -join ''
"this" "issen" "da" "first"System.Object[]"abc" "def" "12" "6""456" "def" "12" "4"

PS D:\temp> $oldContent -join ''
"this" "issen" "da" "first"a12 bc23 abca12 bc23 abg"abc" "def" "12" "6""456" "def" "12" "4"

A Обходной путь предназначен для передачи переменной в командлет Out-String, но вы можете найти более чистый способ ее решения; -)

Compare-Object ($oldContent | out-string) ($newContent | out-string)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...