在windows上,如何检测文件的行尾?

在windows上,如何检测文件的行尾?,windows,file,line-breaks,line-endings,eol,Windows,File,Line Breaks,Line Endings,Eol,我已经看到了这些问题的答案,但这些答案并不是从windows的角度来看的 Windows使用CR LF,Unix使用LF,Mac使用LF,而classic Mac使用其他东西。我没有脑力告诉你,如果一个文件使用的行尾与我键入的行尾不同,我在运行脚本/程序时会出错,坦白说,这没有多大意义。转换后,脚本工作正常 在Windows上,是否可以先检查文件使用的行尾?步骤: 从以下链接下载二进制文件和依赖项zip文件: 提取同一目录下的内容(合并现有目录)。 e、 g.在c:\gnuwin32 然后

我已经看到了这些问题的答案,但这些答案并不是从windows的角度来看的

Windows使用CR LF,Unix使用LF,Mac使用LF,而classic Mac使用其他东西。我没有脑力告诉你,如果一个文件使用的行尾与我键入的行尾不同,我在运行脚本/程序时会出错,坦白说,这没有多大意义。转换后,脚本工作正常

在Windows上,是否可以先检查文件使用的行尾?

步骤:

  • 从以下链接下载
    二进制文件
    依赖项
    zip文件:
  • 提取同一目录下的内容(合并现有目录)。
    e、 g.在
    c:\gnuwin32
然后您可以执行:

c:\gnuwin32\bin\file.exe my-lf-file.txt
my-lf-file.txt;ASCII文本

my-crlf-file.txt;ASCII文本,带CRLF行终止符

当然,您可以将
c:\gnuwin32\bin
添加到
%PATH%
变量中,以便在不提供完整路径的情况下访问它


更新:

  • 如果安装了
    git
    ,则可以启动
    gitbash
    并从那里运行
    file
    命令

  • 或者,您可以按照Microsoft官方文档中的说明安装子系统,并访问
    文件
    命令

我也在寻找“本机”windows脚本解决方案。到目前为止,只需在VB中以二进制方式读取一行或两行,然后检查字符

“手动”检查的一个工具是Notepad++。状态栏的右端靠近文件编码指示器有一个换行符样式指示器

在7.5.6版中看起来是这样的

其他具有十六进制模式的编辑器也可以向您显示

在Powershell中,此命令对于Windows样式的文件返回“True”,对于*nix样式的文件返回“False”

(Get-Content '\\FILESERVER0001\Fshares\NETwork Shares\20181206179900.TXT' -Raw) -match "\r\n$" 

这是马特在这里写的:

使用一个文本编辑器,比如记事本+,可以帮助你理解行尾

它将在工具的任务栏上显示用作Unix(LF)、Macintosh(CR)或Windows(CR LF)的行结束格式

您也可以转到查看->显示符号->显示行尾,将行尾显示为LF/CR LF/CR


在批处理文件中,您可以尝试将文件转换为CRLF并检查其大小是否增加:

rem check-crlf.bat

@echo off
setlocal

call type "%~1" | c:\Windows\System32\find.exe "" /v > "%~1.temp"
set size1=%~z1
rem add 2 in case the file doesn't have a trailing newline, since find will add it
set /a size1plus2=%size1%+2
call :setsize2 "%~1.temp%"

for /f %%a in ('c:\Windows\System32\findstr /R /N "^" "%~1" ^| c:\Windows\System32\find /C ":"') do set lines=%%a

if %size1plus2% equ %size2% (
    if %lines% equ 2 (
        echo File uses LF line endings!
    ) else (
        echo File uses CRLF or has no line endings!
    )
) else (
    if %size1% lss %size2% (
        echo File uses LF line endings!
    ) else (
        echo File uses CR+LF line endings!
    )
)
del "%~1.temp"
exit /b

:setsize2
set size2=%~z1
exit /b
我们正在处理一个没有尾随换行符的文件的特殊情况,以及一个有两个以LF结尾的换行符的文件,这两个换行符都会增加2字节

用法:

check-crlf.bat file-i-care-about.txt

使用十六进制编辑器,分别查找字符
0x0D
0x0A
。这两个字符(按顺序)组成了一个Windows行结束符。如果使用记事本打开文件,很明显它是否包含非Windows EOL字符(因为记事本不将其视为EOL)。不过,这假设文件是一致的——如果只有几个不匹配的EOL序列,这可能并不明显。低估了问题。另请参阅
check-crlf.bat file-i-care-about.txt