0

我正在尝试使用命令行(批处理文件)将文本文件 eol 从 windows xp 机器上的 unix 转换为 windows 格式。我怎么做?那命令是什么?谢谢。

4

1 回答 1

1

这个简单的脚本速度很快,效果很好,除了它将每个 TAB 字符转换为 8 个空格。可以使用 MORE /T 选项修改空格数,但无法保留 TAB 字符。将文件名(可选地与路径)作为唯一的参数传递。

@echo off
more %1 >%1.new
move /y %1.new %1 >nul

所需要的只是读取和回显每一行。FOR /F 命令是完美的,除了它忽略空行。在这里,我使用 FINDSTR 为每一行添加行号前缀,后跟 a :,从而保留空行。然后我使用搜索和替换来删除号码前缀。我必须在循环中打开和关闭延迟扩展以保留!可能出现的任何内容。此脚本保留 TAB,但限制为每行约 8191 个字节。它也相对较慢。对于非常大的文件,它会变得非常慢。

@echo off
setlocal disableDelayedExpansion
>%1.new (
  for /f "delims=" %%A in ('findstr /n "^" %1') do (
    set "ln=%%A"
    setlocal enableDelayedExpansion
    echo(!ln:*:=!
    endlocal
  )
)
move /y %1.new %1 >nul

最后,这是一个非常快的混合批处理/JScript 解决方案,并且没有我所知道的任何限制。

@if (@X)==(@Y) @end /* Harmless hybrid line that begins a JScript comment

::************ Batch portion ***********
@echo off
<%1 cscript //E:JScript //nologo "%~f0" >%1.new
move /y %1.new %1 >nul
exit /b

************* JScript portion **********/
while (!WScript.StdIn.AtEndOfStream) {
  WScript.Stdout.WriteLine(WScript.StdIn.ReadLine());
}
于 2012-10-22T11:54:06.627 回答