在Windows中有没有一种方法(比如PowerShell,或者一个工具)可以递归遍历一个目录,并将任何Unix文件转换成Windows文件。
如果能在PowerShell中找到一种至少能检测Unix文件的方法,我会非常满意。
对于一个文件来说很容易做到这一点,但是我想要一些更具伸缩性的文件(因此倾向于使用PowerShellish解决方案)。
发布于 2009-04-07 20:02:41
如果你感兴趣,这里是纯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\n。这就是为什么你总是以一行结束于文件的末尾。
另外,我编写了上面的代码,以便它只修改需要修改的文件。如果您不关心这一点,您可以删除if语句。哦,确保只有文件才能进入ForEach-Object。除此之外,您可以在管道开始时执行任何过滤操作。
发布于 2009-04-07 04:05:05
Cygwin中有dos2unix和unix2dos。
发布于 2016-09-19 22:26:36
这似乎对我很有效。
Get-Content Unix.txt | Out-File Dos.txthttps://stackoverflow.com/questions/724083
复制相似问题