2016-11-08 127 views
0

我有一個固定寬度的文本文件,所以它包含前導零和空格,我需要從文件中刪除回車符和換行符。 您能否讓我知道如何使用批處理腳本執行此操作?如何使用批次從文本文件中刪除回車符和換行符?

輸入:

ABCDEF GHIJK0000ADS 
ABCDEF GHIJK0000ADS 
ABCDEF GHIJK0000ADS 

輸出:

ABCDEF GHIJK0000ADSABCDEF GHIJK0000ADSABCDEF GHIJK0000ADS 

謝謝, NIRANJAN

回答

2
setlocal enabledelayedexpansion 
set "line=" 
for /f "delims=" %%a in (filename.txt) do set "line=!line!%%a" 
echo %line% 

讀每一行;累積。憑藉delayed expansion模式

+0

我不確定在文件末尾有\ r \ n是否可以。另外,您假定文件總長度小於8191字節。對於問題中的例子來說是正確的,但我懷疑這是實際的數據。 – dbenham

1

這是一種替代方法:

@echo off 
for /F usebackq^ delims^=^ eol^= %%L in ("filename.txt") do (
    < nul set /P ="%%L" 
) 
echo/ 

在盒中取出echo/命令你不希望最後的結尾斷行。

優點:

  • 沒有在單個可變行堆積,使文件長於〜8190個字節是可能的;

缺點:

  • 領先的空格迷路;
  • 行不得以=開頭;

用戶dbenhamhis answer維持領先的空格提到的非平凡純批次的解決方案。我打得四處依賴技術,並與下面的腳本來一起分享:

@echo off 
setlocal EnableExtensions DisableDelayedExpansion 

rem // Define constants here: 
set "_INFILE=filename.txt"   & rem // (input file; `%~1` is argument) 
set "_TMPNAME=%TEMP%%~n0_%RANDOM%" & rem // (name of temporary files, no ext.) 

rem // Build full names of temporary files: 
set "$TMPFILE=%_TMPNAME%.tmp" 
set "$SUBFILE=%_TMPNAME%.sub" 

rem // Store SUB (EOF) character in variable: 
> nul copy nul "%$SUBFILE%" /A 
for /F "usebackq" %%F in ("%$SUBFILE%") do set "$SUBCHAR=%%F" 

rem // Loop through lines of input file: 
for /F usebackq^ delims^=^ eol^= %%L in ("%_INFILE%") do (
    rem // Append SUB char. to current line and write to temp. file: 
    > "%$SUBFILE%" echo(%%L%$SUBCHAR% 
    rem // Copy temp. file to another temp. file, omitting SUB char. plus next: 
    > nul copy "%$SUBFILE%" /A "%$TMPFILE%" /B 
    rem // Output content of second temporary file: 
    type "%$TMPFILE%" 
) 

rem // Clean up temporary files: 
del "%$SUBFILE%" "%$TMPFILE%" 

endlocal 
exit /B 

除了這個事實,領先的白色空間不再丟失,這種方法不會導致一個錯誤,當行開頭一個=標誌。

+0

它不工作。你能告訴我應該傳遞給參數%% L嗎? –

+0

「不工作」是什麼意思?它完全適用於我,使用您的示例輸入數據(存儲在當前工作目錄中的文件filename.txt中)... – aschipfl

2

如果您有現有的可能以空格開頭的行,那麼沒有簡單的純批處理解決方案。 It is possible to write such lines without newlines,但它需要很多代碼。

還有其他問題可能會使純批處理解決方案進一步複雜化。

一般情況下,Windows批處理是,如果你想有一個健壯的,通用的解決方案處理文本文件的糟糕的選擇,

這就是爲什麼我寫JREPL.BAT - a regular expression text processing utility。 JREPL是純粹的腳本(混合批處理/ JScript),它可以從XP以後的任何Windows機器上本機運行。沒有第三方exe文件是必需的。

從命令控制檯通過jrepl /?jrepl /??訪問完整文檔以獲取頁面輸出。

該解決方案對於JREPL來說是徹頭徹尾的小事。

call jrepl "[\r\n]" "" /m /f "input.txt" /o "output.txt" 

如果要覆蓋原文件,然後

call jrepl "[\r\n]" "" /m /f "input.txt" /o - 

爲您的整個文件可以通過JScript中讀入內存該解決方案將只要工作。我相信這個限制接近1千兆字節。

相關問題