powershell - 设置内容,然后获取内容以某种方式更改内容

标签 powershell

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

最佳答案

您的第一行$var = "stuff","and","thangs"创建一个数组(3个字符串):

enter image description here
-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)

关于powershell - 设置内容,然后获取内容以某种方式更改内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55901859/

相关文章:

powershell - Get-Member 中的 ForEach 属性

linux - 是否有适用于 Windows 和 Linux 的 vscode 片段路径变量?

function - 在模块中包含的函数中添加类型

powershell - 如何通过powershell获取azure vm的cpu使用率

powershell - 如何将控制台输出重定向到模块内的 PowerShell 输出?

sql-server - 使用 PowerShell 将 CSV 文件中的数据导入带有附加列的 SQL Server

powershell - Azure DevOps 因警告而失败,且 'fail on standard error' 设置为 true

powershell - 为什么这个新的JObject添加到我的字符串时会奇怪地更改它?

powershell - 使用System.Diagnostics.Process在标准输入上将y输入到Plink?

powershell - 是否可以在用户 cd-ing 到目录时运行脚本