【发布时间】:2021-11-16 02:17:59
【问题描述】:
我有一个脚本,它定期生成目录中所有文件的列表,然后将结果的文本文件写入不同的目录。
我想更改此设置,以便它检查输出目录中的最新文本文件,并且仅在存在差异时创建一个新文件。看起来很简单。
这是我尝试过的:
首先我获取目录中最新的文件,获取哈希,并将我的变量值写入控制台:
$lastFile = gci C:\ReportOutputDir | sort LastWriteTime | select -last 1 | Select-Object -ExpandProperty FullName
$oldHash = Get-FileHash $lastFile | Select-Object Hash
Write-Host 'lastFile = '$lastFile
Write-Host 'oldHash = '$oldHash
输出:
lastFile = C:\ReportOutputDir\test1.txt
oldHash = @{Hash=E7787C54F5BAE236100A24A6F453A5FDF6E6C7333B60ED8624610EAFADF45521}
然后我在 FileList 目录上执行完全相同的 gci,并创建一个新文件 (new_test.txt),然后获取该文件的哈希:
gci -Path C:\FileLists -File -Recurse -Name -Depth 2 | Sort-Object | out-file C:\ReportOutputDir\new_test.txt
$newFile = gci C:\ReportOutputDir | sort LastWriteTime | select -last 1 | Select-Object -ExpandProperty FullName
$newHash = Get-FileHash $newFile | Select-Object Hash
Write-Host 'newFile = '$newFile
Write-Host 'newHash = '$newHash
输出:
newFile = C:\ReportOutputDir\new_test.txt
newHash = @{Hash=E7787C54F5BAE236100A24A6F453A5FDF6E6C7333B60ED8624610EAFADF45521}
最后,我尝试了我的 -eq 运算符,如果它相等,我通常会简单地删除 newFile。现在,我只是做一个简单的:
if ($newHash -eq $oldHash){
'files are equal'
}
else {'files are not equal'}
不知何故,我得到了
files are not equal
什么给了?此外,为了记录,我最初试图将 gci 输出保存到变量并将最后一个文件的内容与 gci 输出进行比较,但也遇到了 -eq 运算符的问题。对PowerShell的东西相当陌生,所以我确定我在这里做错了。
【问题讨论】:
标签: powershell