我有一個固定寬度的文本文件,所以它包含前導零和空格,我需要從文件中刪除回車符和換行符。 您能否讓我知道如何使用批處理腳本執行此操作?如何使用批次從文本文件中刪除回車符和換行符?
輸入:
ABCDEF GHIJK0000ADS
ABCDEF GHIJK0000ADS
ABCDEF GHIJK0000ADS
輸出:
ABCDEF GHIJK0000ADSABCDEF GHIJK0000ADSABCDEF GHIJK0000ADS
謝謝, NIRANJAN
我有一個固定寬度的文本文件,所以它包含前導零和空格,我需要從文件中刪除回車符和換行符。 您能否讓我知道如何使用批處理腳本執行此操作?如何使用批次從文本文件中刪除回車符和換行符?
輸入:
ABCDEF GHIJK0000ADS
ABCDEF GHIJK0000ADS
ABCDEF GHIJK0000ADS
輸出:
ABCDEF GHIJK0000ADSABCDEF GHIJK0000ADSABCDEF GHIJK0000ADS
謝謝, NIRANJAN
setlocal enabledelayedexpansion
set "line="
for /f "delims=" %%a in (filename.txt) do set "line=!line!%%a"
echo %line%
讀每一行;累積。憑藉delayed expansion
模式
這是一種替代方法:
@echo off
for /F usebackq^ delims^=^ eol^= %%L in ("filename.txt") do (
< nul set /P ="%%L"
)
echo/
在盒中取出echo/
命令你不希望最後的結尾斷行。
優點:
缺點:
=
開頭;用戶dbenham在his 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
除了這個事實,領先的白色空間不再丟失,這種方法不會導致一個錯誤,當行開頭一個=
標誌。
它不工作。你能告訴我應該傳遞給參數%% L嗎? –
「不工作」是什麼意思?它完全適用於我,使用您的示例輸入數據(存儲在當前工作目錄中的文件filename.txt中)... – aschipfl
如果您有現有的可能以空格開頭的行,那麼沒有簡單的純批處理解決方案。 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千兆字節。
我不確定在文件末尾有\ r \ n是否可以。另外,您假定文件總長度小於8191字節。對於問題中的例子來說是正確的,但我懷疑這是實際的數據。 – dbenham