You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

批处理反转文本行序后丢失CRLF,如何保留换行符?

解决批处理反转文本行序时丢失CRLF的问题

你的批处理脚本反转行序时丢失CRLF,核心问题是for /F默认会跳过空行,且无法直接保留原文件的所有换行结构。以下是两种修复方案,能完整保留原文件的CRLF(包括空行对应的换行):

基础修复版(适用于不含特殊字符的文本)

@echo off
ren *.txt Original.txt
setlocal EnableDelayedExpansion

:: 初始化空的反转文件
type nul > Reversed.txt

:: 用findstr给每行加行号,强制读取所有行(包括空行)
for /F "tokens=1* delims=:" %%a in ('findstr /n "^" Original.txt') do (
    :: 将当前行插入到临时文件开头,再替换目标文件
    (echo(%%b&type Reversed.txt) > temp.txt
    move /Y temp.txt Reversed.txt > NUL
)

endlocal

增强兼容版(支持含!等特殊字符的文本)

如果原文件包含!这类会被延迟扩展解析的字符,用下面的脚本避免内容损坏:

@echo off
ren *.txt Original.txt
setlocal DisableDelayedExpansion

type nul > Reversed.txt

:: 读取所有行(含空行)
for /F "tokens=1* delims=:" %%a in ('findstr /n "^" Original.txt') do (
    set "line=%%b"
    :: 临时开启延迟扩展输出内容
    setlocal EnableDelayedExpansion
    (echo(!line!&type Reversed.txt) > temp.txt
    endlocal
    move /Y temp.txt Reversed.txt > NUL
)

endlocal

原理说明

  • findstr /n "^" 会给每一行(包括空行)添加行号前缀(如3:),让for /F能读取到所有行,不会跳过空行;
  • tokens=1* delims=: 将行号和原内容拆分,%%b就是原行的完整内容(空行则为空白);
  • echo(%%b 或 echo(!line! 会自动输出内容并追加CRLF,确保每行的换行符被保留;
  • 通过将当前行放在临时文件开头,再覆盖目标文件,实现行序反转。

内容的提问来源于stack exchange,提问作者Eta Beta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 19:52:41