如何从批处理文本文件中删除回车符和换行符?

我有一个固定宽度的文本文件,所以它包含前导零和空格,我需要从文件中删除回车符和换行符。 你能不能让我知道如何使用批处理脚本来做到这一点?

input:

ABCDEF GHIJK0000ADS ABCDEF GHIJK0000ADS ABCDEF GHIJK0000ADS 

输出:

 ABCDEF GHIJK0000ADSABCDEF GHIJK0000ADSABCDEF GHIJK0000ADS 

谢谢,Niranjan

Solutions Collecting From Web of "如何从批处理文本文件中删除回车符和换行符?"

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

阅读每一行;积累。 依靠delayed expansion模式

如果您有现有的行可能以空格开头,那么没有简单的纯批次解决方案。 可以不用换行符来写这样的代码,但是代码很多。

还有其他问题可能使纯批处理解决方案进一步复杂化。

一般来说,如果你需要一个健壮的,通用的解决方案,Windows批处理是糟糕的选择来处理文本文件,

这就是为什么我写了JREPL.BAT – 一个正则表达式文本处理工具 。 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千兆字节。

这是另一种方法:

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

如果您不想要最后的换行符,请删除echo/命令。

优点:

  • 在单个变量中没有线的累积,所以文件可能长于〜8190字节;

缺点:

  • 领先的白色空间迷路了;
  • 行不能以=开头;

用户dbenham在他的答案中提到了非平凡的纯批量解决方案,以保持领先的空白。 我玩弄依靠技术,并与下面的脚本一起分享:

 @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 

除了前面的空格不再丢失这个事实之外,这种方法不会导致当一行以=符号开始时的错误。