Windows 中是否有一种方法(例如 PowerShell 或工具)可以递归目录并将任何 Unix 文件转换为 Windows 文件。
我对 PowerShell 中至少检测 Unix 文件的方法非常满意。
对一个文件执行此操作很容易,但我想要一些更具可扩展性的东西(因此倾向于 PowerShellish 解决方案)。
如果您有兴趣,这里是纯 PowerShell 方式。
查找至少有一个 Unix 行结尾的文件 (PowerShell v1):
dir * -inc *.txt | %{ if (gc $_.FullName -delim "`0" | Select-String "[^`r]`n") {$_} }
以下是如何查找 Unix 行结尾并将其隐藏为 Windows 行结尾。需要注意的一件重要事情是,如果文件末尾还没有结束行,则会在文件末尾添加一个额外的行结束符 (\r\n)。如果您确实不想这样做,我将发布一个示例来说明如何避免它(它有点复杂)。
Get-ChildItem * -Include *.txt | ForEach-Object {
## If contains UNIX line endings, replace with Windows line endings
if (Get-Content $_.FullName -Delimiter "`0" | Select-String "[^`r]`n")
{
$content = Get-Content $_.FullName
$content | Set-Content $_.FullName
}
}
上面的方法之所以有效,是因为 PowerShell 会自动分割 \n 上的内容(如果存在则删除 \r),然后在将每个内容(在本例中为一行)写入文件时添加 \r\n。这就是为什么您总是以文件末尾结尾的行结束。
另外,我编写了上面的代码,以便它只修改它需要的文件。如果你不关心这个,你可以删除if
陈述。哦,确保只有文件才能到达ForEach-对象 https://learn.microsoft.com/en-us/powershell/module/Microsoft.PowerShell.Core/ForEach-Object。除此之外,您可以在管道开始时执行任何您想要的过滤。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)