我有一个文本文件,我在其中存储一些备份文件名及其哈希表。我还有另一个文本文件,仅存储哈希表。我将第二个文本文件添加到第一个文档下。我想比较这些哈希表是否相同,我想在哈希表-2附近添加,否则我想在哈希表-1附近添加。
“ SHA256”,“ 89EC548C14582B2BDC7739BC0FA007”,“ C:\ WINDOWS \ system32@Ap.png”
“ SHA256”,“ 0B99B2576F1FA0689FF6E03462076C”,“ C:\ WINDOWS \ system32 @ AudioTot”
“ SHA256”,“ F3B178AD338023AA3CBCB071CC0063”,“ C:\ WINDOWS \ system32@biage.png”
“ SHA256”,“ 383D8CBFCD078B3D661655A816676F”,“ C:\ WINDOWS \ system32@edage.mui”
“ 89EC548C14582B2BDC7739BC0FA007” -2
“ 0B99B2576F1FA0689FF6E03462076C” -2
“ 0A57D7F60CDD9DB6F6F461BBC464FD” -1
“ F3B178AD338023AA3CBCB071CC0063” -2
“ 7BCA060610F1A753A881593F967G47” -1
“ 383D8CBFCD078B3D661655A816676F” -2
我正在使用从另一个文件在txt文件下添加哈希,但是无法进行比较:
$From = Get-Content -Path .\CopyFromFile.txt
Add-Content -Path .\CopyToFile.txt -Value $From
Get-Content -Path .\CopyToFile.txt
答案 0 :(得分:1)
检查以下代码是否有助于解决您的问题。
代码被包装在脚本块中,以创建新的作用域,并preserve和$ErrorActionPreference
和{{1} } preference variables。
使用ReadAllText
方法读取$OFS
文件的内容。
CopyToFile.txt
输出:
& {
$ErrorActionPreference = 'Stop'
$OFS = ','
try {
$To = [System.IO.File]::ReadAllText('.\CopyToFile.txt')
$From = & {
# Add a line if the file .\CopyToFile.txt did not end with a newline.
if ( -not $To.EndsWith([System.Environment]::NewLine) ) { '' }
Get-Content -Path .\CopyFromFile.txt |
ForEach-Object { "$($_, @(-1, -2)[[int]$To.Contains($_)])" }
}
Add-Content -Path .\CopyToFile.txt -Value $From
Get-Content -Path .\CopyToFile.txt
} catch {
$_ | Out-String | Write-Warning
}
}
答案 1 :(得分:1)
对不起,但我认为创建内部不同格式的文本文件不是一种聪明的方法。
为什么不像PowerShell
和Import-Csv
那样使用更Compare-Object
的方式来创建新对象,该对象也可以另存为csv文件。
假设以上数据存储在文件hashes.csv
中,纯哈希存储在hashes.txt
这个小脚本(行)
Compare-Object -ref (Import-Csv .\hashes.csv -Header Algorythm,Hash,File) `
-dif (Import-csv .\hashes.txt -Header Hash) -Property Hash -PassThru -IncludeEqual
产生以下输出:
Algorythm Hash File SideIndicator
--------- ---- ---- -------------
SHA256 89EC548C14582B2BDC7739BC0FA007 C:\WINDOWS\system32@Ap.png ==
SHA256 0B99B2576F1FA0689FF6E03462076C C:\WINDOWS\system32@AudioTot ==
SHA256 F3B178AD338023AA3CBCB071CC0063 C:\WINDOWS\system32@biage.png ==
SHA256 383D8CBFCD078B3D661655A816676F C:\WINDOWS\system32@edage.mui ==
0A57D7F60CDD9DB6F6F461BBC464FD =>
7BCA060610F1A753A881593F967G47 =>
可以进行调整,以将SideIndicator
,-2
替换为-1