добавить новую строку в текстовый файл с пакетным файлом без изменения формата - PullRequest
1 голос
/ 13 сентября 2011

Это мой скрипт.

@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

Этот скрипт я сохраняю как run1.bat.После запуска у меня проблемы с форматом.Формат не в порядке: символы задней вкладки удаляются.Как это исправить?

Оригинальный файл:

header 1<--here got tab delimited format--><--here got tab delimited format-->
header 2<--here got tab delimited format--><--here got tab delimited format-->
header 3<--here got tab delimited format--><--here got tab delimited format-->
details 1
details 2

Вывод:

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 Ответ

4 голосов
/ 13 сентября 2011

Чтение с set /p действительно мощно, так как не меняет никаких символов.
Но он удаляет (лишние) завершающие символы CR / LF / TAB.

Как работает set/p, здесь объясняется Как работает Set / p и здесь Новая техника: 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%
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...