Windows换行符的Unix换行符(在Windows上)

edd*_*ves 28 powershell newline line-breaks

有没有人知道Windows中的一种方式(比如Powershell或工具)可以递归目录并将任何unix文件转换为Windows文件.

我对Powershell中至少检测到unix文件的方式非常满意.

对于单个文件来说,这很容易做到这一点,但我追求的是一些可扩展的东西(因此倾向于Powershellish解决方案).

Jas*_*her 34

如果您有兴趣,这是纯PowerShell方式.

查找至少有一个UNIX行结束的文件(PowerShell v1):

dir * -inc *.txt | %{ if (gc $_.FullName -delim "`0" | Select-String "[^`r]`n") {$_} }
Run Code Online (Sandbox Code Playgroud)

以下是查找和修改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
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的工作原理是因为PowerShell会自动拆分\n上的内容(如果存在则删除\ r \n),然后在将每个东西(在本例中为一行)写入文件时添加\ r \n.这就是为什么你总是以文件末尾的一行结束.

此外,我编写了上面的代码,以便它只修改它需要的文件.如果您不关心,可以删除if语句.哦,确保只有文件到达ForEach-Object.除此之外,您可以在该管道的开头做任何您想要的过滤.


Mis*_*ble 13

Cygwin中有dos2unix和unix2dos .

  • 我推荐这种技术,因为unix utils可以更好地维护原始文件编码(UTF-8,ASCII等).我以前在打算保留ASCII文件ASCII时遇到了PS问题. (2认同)
  • 我使用powershell列出文件,然后将它传递给dos2unix.exe,如下所示:`dir -Recurse -File -Exclude .git | %{dos2unix --u2d --skipbin $ _}` (2认同)

小智 9

这似乎对我有用.

Get-Content Unix.txt | Out-File Dos.txt
Run Code Online (Sandbox Code Playgroud)

  • 或`Get-Content Unix.txt | 设置内容Dos.txt` (3认同)
  • @Joffrey`(获取内容文件.txt)| 设置内容 file.txt ` (2认同)

sou*_*rge 6

下载vim,打开你的文件并发布

:se fileformat=dos|up
Run Code Online (Sandbox Code Playgroud)

多个文件的批处理(C:\ tmp中的所有*.txt文件 - 递归):

:args C:\tmp\**\*.txt
:argdo se fileformat=dos|up
Run Code Online (Sandbox Code Playgroud)

  • 这只是我想到的第一件事,它出现在我拥有/管理的每一个盒子上.顺便说一句:你真的建议使用eclipse(85MB)并逐个文件而不是使用vim(8.5MB)并一次性完成吗? (3认同)