Batch file 使用批处理文件在文本文件中添加新行,但不更改格式

Batch file 使用批处理文件在文本文件中添加新行,但不更改格式,batch-file,Batch File,这是我的剧本 @ECHO OFF SET origfile="C:\Documents and Settings\user\Desktop\test1\before.txt" SET tempfile="C:\Documents and Settings\user\Desktop\test1\after.txt" SET insertbefore=4 FOR /F %%C IN ('FIND /C /V "" ^<%origfile%') DO SET totallines=%%C &l

这是我的剧本

@ECHO OFF
SET origfile="C:\Documents and Settings\user\Desktop\test1\before.txt"
SET tempfile="C:\Documents and Settings\user\Desktop\test1\after.txt"
SET insertbefore=4
FOR /F %%C IN ('FIND /C /V "" ^<%origfile%') DO SET totallines=%%C

<%origfile% (FOR /L %%i IN (1,1,%totallines%) DO (
  SETLOCAL EnableDelayedExpansion
  SET /P L=
  IF %%i==%insertbefore% ECHO(
  ECHO(!L!
  ENDLOCAL
)
) >%tempfile%
COPY /Y %tempfile% %origfile% >NUL
DEL %tempfile%
pause
输出:

header 1<--tab delimited is missing--><--tab delimited is missing-->
header 2<--tab delimited is missing--><--tab delimited is missing-->
header 3<--tab delimited is missing--><--tab delimited is missing-->

details 1
details 2
details 3
标题1
标题2
标题3
详情1
详情2
详情3

使用
set/p
阅读非常强大,因为它不会改变任何字符。
但它会删除(额外的)尾部CR/LF/TAB字符

这里和这里解释了
set/p
的工作原理

为了解决您的问题并保留尾随选项卡,您需要

所以你的代码看起来像这样

@echo off
SET origfile="C:\Documents and Settings\user\Desktop\test1\before.txt"
SET tempfile="C:\Documents and Settings\user\Desktop\test1\after.txt"
SET insertbefore=4
set LineCnt=0
SETLOCAL DisableDelayedExpansion
(
  FOR /F "usebackq delims=" %%a in (`"findstr /n ^^ %origfile%"`) do (
    set "var=%%a"
    set /a lineCnt+=1
    SETLOCAL EnableDelayedExpansion
    set "var=!var:*:=!"
    IF !lineCnt!==%insertbefore% ECHO(
    echo(!var!
    ENDLOCAL
  )
) >%tempfile%
COPY /Y %tempfile% %origfile% >NUL
DEL %tempfile%

使用
set/p
阅读非常强大,因为它不会改变任何字符。
但它会删除(额外的)尾部CR/LF/TAB字符

这里和这里解释了
set/p
的工作原理

为了解决您的问题并保留尾随选项卡,您需要

所以你的代码看起来像这样

@echo off
SET origfile="C:\Documents and Settings\user\Desktop\test1\before.txt"
SET tempfile="C:\Documents and Settings\user\Desktop\test1\after.txt"
SET insertbefore=4
set LineCnt=0
SETLOCAL DisableDelayedExpansion
(
  FOR /F "usebackq delims=" %%a in (`"findstr /n ^^ %origfile%"`) do (
    set "var=%%a"
    set /a lineCnt+=1
    SETLOCAL EnableDelayedExpansion
    set "var=!var:*:=!"
    IF !lineCnt!==%insertbefore% ECHO(
    echo(!var!
    ENDLOCAL
  )
) >%tempfile%
COPY /Y %tempfile% %origfile% >NUL
DEL %tempfile%

我冒昧地把你的问题重新表述一下,以澄清它。请检查一下,如果我弄错了,请随意将其重新编辑为您认为正确的任何形式。我冒昧地重新表述了您的问题,以澄清它。请检查它,如果我弄错了,请随意再编辑一次,以任何你认为正确的形式。