Batch file 在特定单词之前批量修改text.txt
我有一个file.txt,其中有如下行Batch file 在特定单词之前批量修改text.txt,batch-file,text-manipulation,Batch File,Text Manipulation,我有一个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 我试过使用这个代码。bat @echo off del "newfile.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
我试过使用这个代码。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
)都是通过标记
选项隐式定义的(另请参见@Stephan的评论)
除此之外,代码还将原始行和拆分行输出到输出文件中。因此,我插入了一个else
子句
最后,我实现了一个附加条件:代码现在也搜索IF
,因此只拆分以IF
开头并包含THEN
作为第七个标记的行
@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之后,可以简化上述解决方案: 在这里,只有一个
用于循环,如果需要子句,则只有一个。只需将每个然后替换为然后:
(我从中创建了一个换行符)您只能对使用一个-变量:用于/f”“%%a in(“oldfile.txt”)do(
%b
,%c
,…是隐式的(无论如何工作;标记=x
意味着它们)。(如中所述)因此,关键字THEN
是拆分文本行的唯一条件?您重复了for/f
,请查看它,这样您的文本将按预期执行此技巧使解决方案更简单:for/f“eol=| tokens=1-7*”%a in(“oldfile.txt”)执行if/i“%%a-%%g”eq“if-THEN”然后(echo%%a..%%f&echo%%g%%h)else echo%%a..%%h
@Aacini,谢谢你的建议!我只是复制了原始代码并插入了if
s/else
s,没有考虑改进其余的代码,但我会相应地编辑我的答案……我喜欢这个!:)
@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"
@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 !
)