2012-10-22 56 views
0

我想在windows xp機器上使用命令行(批處理文件)將文本文件eol轉換爲unix窗口格式。我怎麼做?這是什麼命令?謝謝。eol unix到命令行中的窗口批處理

+0

也許你可以在你的機器上找到一些'dos2unix'工具。 –

+0

或'unix2dos'例如從http://sourceforge.net/projects/u2d/ –

+0

我沒有得到如何在命令行中使用這個意大利的東西: – babboon

回答

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()); 
}