有没有人知道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 \n),然后在将每个东西(在本例中为一行)写入文件时添加\ r \n.这就是为什么你总是以文件末尾的一行结束.
此外,我编写了上面的代码,以便它只修改它需要的文件.如果您不关心,可以删除if语句.哦,确保只有文件到达ForEach-Object.除此之外,您可以在该管道的开头做任何您想要的过滤.
在Cygwin中有dos2unix和unix2dos .
这似乎对我有用.
Get-Content Unix.txt | Out-File Dos.txt
下载vim,打开你的文件并发布
:se fileformat=dos|up
多个文件的批处理(C:\ tmp中的所有*.txt文件 - 递归):
:args C:\tmp\**\*.txt :argdo se fileformat=dos|up