问题描述
我正在尝试开发一个 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-File
和 Set-Content
默认情况下用一个适合平台的换行符终止每个(字符串化的)输入对象。 (相比之下,-NoNewLine
在任何输入对象之间放置没有分隔符;对于单个多行输入字符串,这意味着不附加尾随换行符。)