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
答案 0 :(得分:4)
您的第一行$var = "stuff","and","thangs"
创建一个数组(3个字符串):
-eq
运算符的工作方式不同于比较对象数组的工作。您可以改用 Compare-Object cmdlet:
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"
一种 解决方法 是将变量通过管道传递到Out-String
cmdlet,但是您可能会找到一种更干净的方法来解决它;-)
Compare-Object ($oldContent | out-string) ($newContent | out-string)