【问题标题】:eol unix to windows in command line .bat batch在命令行 .bat 批处理中将 unix 升级到 Windows
【发布时间】:2012-10-22 06:58:46
【问题描述】:

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

【问题讨论】:

  • 也许你可以在你的机器上找到一些dos2unix 实用程序。
  • unix2dos 例如来自sourceforge.net/projects/u2d
  • 我不明白如何在命令行中使用这个意大利语:|

标签: command-line batch-file converter eol


【解决方案1】:

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

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

所需要的只是读取和回显每一行。 FOR /F 命令是完美的,除了它忽略空行。在这里,我使用 FINDSTR 为每一行添加行号前缀,后跟 :,从而保留空行。然后我使用搜索和替换来删除号码前缀。我必须在循环中打开和关闭延迟扩展,以保留可能出现的任何!。此脚本保留 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());
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-13
    • 1970-01-01
    相关资源
    最近更新 更多