我有许多文件与。mbt扩展名在一个目录,目前它的时间为我的同事编辑每个文件用notepad++改变编码从UTF-8 BOM到UTF-8,因为这些文件被进一步导入到软件和不工作编码UTF-8 BOM。
所以我找到了一个powershell脚本,它用正确编码的新文件替换了脚本中指定的文件,但由于这并不能解决我的问题,并且由于我缺乏powershell脚本知识,我无法弄清楚如何使它用另一个文件替换文件而不改变其名称,但只有编码并为指定目录中的所有文件做。
这是我解释的当前代码:
function Remove-BomFromFile ($OldPath, $NewPath)
{
$Content = Get-Content $OldPath -Raw
$Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding $False
[IO.File]::WriteAllLines($NewPath, $Content, $Utf8NoBomEncoding)
}
$Path = "C:UsersslavkovsDesktoptestZ_00154_.mbt"
$NewPath = "C:UsersslavkovsDesktoptestZ_00154_New.mbt"
Remove-BomFromFile -OldPath $Path -NewPath $NewPath
[CmdletBinding()]
param(
[Parameter(Mandatory=$true)]
[string]$path,
[Parameter(Mandatory=$false)]
[string]$dest = $path,
[Parameter(Mandatory=$true)]
[string]$encoding
)
利用。net方法.WriteAllText()
的IO。默认情况下,文件类写入没有BOM的UTF-8,您可以使用:
$rootDirectory = 'D:Test' # path where the .mbt files are to be found
Get-ChildItem -Path $rootDirectory -Filter '*.mbt' -File | ForEach-Object {
[System.IO.File]::WriteAllText($_.FullName, ([System.IO.File]::ReadAllText($_.FullName)))
}