批量修改特定词前text.txt

Batch modifying text.txt before a specific word

我有一个 file.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)

我遇到了什么问题?

您试图在外部 for 命令中为所有标记指定变量,但您必须只指定第一个,在您的情况下为 %%a;所有其他(%%b%%c、...、%%g)都是通过 tokens 选项隐式定义的(另请参阅@Stephan 的评论)。

除此之外,您的代码将原始 分割线输出到输出文件中。因此我插入了一个 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 !
)

(我从 here 中创建了一个换行符)