在powershell中替换制表符、新空格、空格并计算该文件的SHA1?

问题描述

我正在尝试开发一个 Powershell 脚本,它应该:

这是我尝试过但不起作用的代码,因为它为我提供了带有空格、换行符和制表符的文件的 SHA1:

$File = "C:\MyThirdProject\jpc_flt.txt"
$TargetFile = "C:\MyThirdProject\flttest.txt"
$lines=(Get-Content $File)
$TrimLine = foreach ($line in $lines) { $line.Trim(" `t`n`r") } ##Have tried -->$TrimLine=(Get-Content -LiteralPath $File) | foreach{ $_.Trim(" `t`n`r")} | Set-Content $TargetFile
$TrimLine | Out-File $TargetFile
Get-filehash -Path $TargetFile -Algorithm SHA1 

我对不同的方法或任何其他已经执行此操作的 cmdlet 持开放态度。请帮忙!

解决方法

tl;dr

Set-Content -LiteralPath $TargetFile -NoNewLine -Value (
  (Get-Content -Raw -LiteralPath $File) -replace '\s+'
)

Get-FileHash -LiteralPath $TargetFile -Algorithm SHA1

注意 -Raw (PSv3+) 和 -NoNewLine (PSv5+) 的使用。


至于你尝试了什么

$lines=(Get-Content $File)

使用 Get-Content 将目标文件的内容作为行数组返回。 (相比之下,使用 -Raw 将文件作为一个整体读入单个多行字符串)。

$TrimLine | Out-File $TargetFile

Out-FileSet-Content 默认情况下用一个适合平台的换行符终止每个(字符串化的)输入对象。 (相比之下,-NoNewLine 在任何输入对象之间放置没有分隔符;对于单个多行输入字符串,这意味着不附加尾随换行符。)