我有一个固定宽度的文本文件,因此它包含前导零和空格,我需要从文件中删除回车符和换行符。 您能否告诉我如何使用批处理脚本执行此操作?
输入:
ABCDEF GHIJK0000ADS
ABCDEF GHIJK0000ADS
ABCDEF GHIJK0000ADS
输出:
ABCDEF GHIJK0000ADSABCDEF GHIJK0000ADSABCDEF GHIJK0000ADS
谢谢, NIRANJAN
答案 0 :(得分:3)
如果现有的行可以以空格开头,那么没有简单的纯批处理解决方案。 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千兆字节。
答案 1 :(得分:2)
setlocal enabledelayedexpansion
set "line="
for /f "delims=" %%a in (filename.txt) do set "line=!line!%%a"
echo %line%
阅读每一行;累积。依赖于delayed expansion
模式
答案 2 :(得分:1)
这是另一种方法:
@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
除了前导空格不再丢失这一事实外,当一行以=
符号开头时,此方法不会导致错误。