Windows命令行/shell-放弃UTF-8 BOM表

Windows命令行/shell-放弃UTF-8 BOM表,windows,command-line,batch-file,Windows,Command Line,Batch File,这个问题是我们继续讨论的问题 我使用的正则表达式可以很好地匹配要保留/要丢弃的行。问题是,该文件是由一堆其他文件组成的,有时我希望保留的行作为UTF-8编码文件的第一行开始。这意味着findstr命令返回如下内容: ∩╗┐LineToKeep that started out as the first line in its file LineToKeep another LineToKeep more lines ∩╗┐LineToKeep that started out as the fi

这个问题是我们继续讨论的问题

我使用的正则表达式可以很好地匹配要保留/要丢弃的行。问题是,该文件是由一堆其他文件组成的,有时我希望保留的行作为UTF-8编码文件的第一行开始。这意味着
findstr
命令返回如下内容:

LineToKeep that started out as the first line in its file
LineToKeep another
LineToKeep more lines
LineToKeep that started out as the first line in its file
LineToKeep more
可以保证,除BOM字节外,该行始终以“LineToKeep”开头。既然这些windows shell命令无法正确处理这三个UTF-8 BOM字节,我如何才能去掉它们

我希望有一种方法可以将它们删除,或者对前面问题中的
findstr
命令进行修改


因为我知道每一行都必须以“LineToKeep”或“LineToKeep”开头∩╗┐LineToKeep“,我想有一种方法可以计算每一行的if(Line[3:10]=“LineToKeep”){Line=Line[3:];}。

我最后在windows cmd中调用了PowerShell:

powershell . "Get-ChildItem . | Select-String '^LineToKeep' | foreach {$_.Line}"
另一种替代方法是在位删除BOM表文件:

sed -zbi "1s/^\xEF\xBB\xBF//" filepath

这需要下载sed 4.4,它提供了防止工作的功能。

。这就是为什么perl应该与每个操作系统一起提供;-)您是否考虑过使用Powershell而不是普通的命令解释器?做这样的事是微不足道的。Windows shell不太喜欢Unicode。我将在Visual Studio的生成前/生成后事件中运行该脚本。根据,运行PowerShell脚本可能是一种选择。不过,这感觉有点像一个外部解决方案。