Пакетное изменение text.txt перед определенным словом
У меня есть файл.txt, где есть строки как
IF TANK T395 LEVEL ABOVE 4 THEN PUMP PFALDA395&T395 STATUS IS CLOSED
что я хотел бы преобразовать в
IF TANK T395 LEVEL ABOVE 4
THEN PUMP PFALDA395&T395 STATUS IS CLOSED
Я пытался с этим code.bat
@echo off
del "newfile.txt" 2>nul
(
for /f "eol=| usebackq for /f tokens=1,2,3,4,5,6,* delims= " %%a %%b %%c %%d %%e %%f %%g in ("oldfile.txt") do (
for /f %%h in ("%%g") do (
if /i "%%h"=="THEN" (
echo %%a %%b %%c %%d %%e %%f
echo. %%g
)
)
echo %%a %%b %%c %%d %%e %%f %%g
)
)>"newfile.txt"
Я быстро
%b non atteso (not waited)
Что я спотыкаюсь в?
2 ответа
Вы пытались указать переменные для всех токенов во внешнем for
команда, но вы должны указать только первый, который %%a
в твоем случае; все остальные (%%b
, %%c
,..., %%g
) определяются неявно через tokens
вариант (см. также @ комментарий Стефана).
Кроме того, ваш код выводит оригинал и разделенную строку в выходной файл. Поэтому я вставил else
пункт.
Наконец, я реализовал дополнительное условие: код ищет IF
а теперь и разбивает поэтому только строки, которые начинаются с IF
и содержать THEN
как 7-й жетон.
@echo off
del "newfile.txt" 2> nul
(
for /f "eol=| usebackq tokens=1,2,3,4,5,6,* delims= " %%a in ("oldfile.txt") do (
if /i "%%a"=="IF" (
for /f "eol=| tokens=1 delims= " %%h in ("%%g") do (
if /i "%%h"=="THEN" (
echo %%a %%b %%c %%d %%e %%f
echo %%g
) else (
echo %%a %%b %%c %%d %%e %%f %%g
)
)
) else (
echo %%a %%b %%c %%d %%e %%f %%g
)
)
) > "newfile.txt"
Редактировать:
Приведенное выше решение может быть упрощено после следующего комментария@Aacini:
@echo off
del "newfile.txt" 2> nul
(
for /f "eol=| usebackq tokens=1-7* delims= " %%a in ("oldfile.txt") do (
if /i "%%a|%%g"=="IF|THEN" (
echo.%%a %%b %%c %%d %%e %%f
echo.%%g %%h
) else (
echo.%%a %%b %%c %%d %%e %%f %%g %%h
)
)
) > "newfile.txt"
Здесь только один for
петля и один if
оговорка обязательна.
Просто замените каждый <space>THEN<space>
с <newline>THEN<space>
:
@echo off
setlocal enabledelayedexpansion
REM Creating a Newline variable (the two blank lines are required!)
set NLM=^
set NL=^^^%NLM%%NLM%^%NLM%%NLM%
for /f "delims=" %%a in (t.txt) do (
set line=%%a
echo(!line: THEN =%NL%THEN !
)
(Я взял создание NewLine отсюда)