windows bat查找文件中指定字符串,不包含字符串的直接输出,包含指定字符串的行再匹配另一个字符串?

windows bat循环查找content2、content3.....查找他们中是否包含指定字符串aaa,不包含字符串aaa的行直接输出,包含指定字符串的行直接输出新文件,如果没有就在结尾增加一个字符串aaa再输出,行的顺序不能乱,开头三行及结尾二行都保留另外每行内有空格、=、*等特殊字符
根本目的就是修改文件并输出到新文件,文件格式如下:
【begin】
abcd=123
【content】
content1 = *adasda-adads
content2 = aaa,*adasdasdad-adaddad
content3 = *adasdas-asdad-asdadad
[end]
edfr=234
修改后如下:
【begin】
abcd=123
【content】
content1 = *adasda-adads
content2 = aaa,*adasdasdad-adaddad
content3 = *adasdas-asdad-asdadad,aaa
[end]
edfr=234

不清楚你的实际文件/情况,仅以问题中的样例说明及猜测为据;以下代码复制粘贴到记事本,另存为xx.bat,编码选ANSI,跟要处理的文件放一起双击运行
/*&cls
@echo off
rem 如果一个指定文件内某些指定特征行中不包含/不存在指定字符串则在行尾添加该指定字符串
mode con lines=3000
set #=Any question&set @=WX&set $=Q&set/az=0x53b7e0b4
title %#% +%$%%$%/%@% %z%
cd /d "%~dp0"
set "file=xxx.txt"
set "word=aaa"
if not exist "%file%" (echo;"%file%" not found&pause&exit)
type "%file%"|cscript -nologo -e:jscript "%~f0" "%word%"
echo;%#% +%$%%$%/%@% %z%
pause
exit
*/
var word=WSH.Arguments(0);
while(!WSH.StdIn.AtEndOfStream){
var line=WSH.StdIn.ReadLine();
var m=line.match(/^\s*?content(\d+) ?=(.+)/);
if(m){
if(Number(m[1])>1 && m[2].indexOf(word)<0){line+=','+word;}
}
WSH.StdErr.WriteLine(line);
}追问

文本如下:

[Unicode]
[Privilege]
SeNet= *S-1-1-0,*S-1-5,aaa
SeTcb =
SeSer = *S-1-5
SeSystem =*S-1-32
[end]
vision=1
字数要求只贴出这些,遍历文本查找行中比如上面SeSeNet、SeSer、SeTcb开头的,如果包含aaa直接输出该行,如果没有就结尾添加,aaa,如果=后面没东西,就加aaa,其他行直接输出

追答

按运行代码后窗口标题栏中的提示联系我

追问

表述可能有误,具体如下:一个文本含很多行,检索每行特定的字符串(一行一个都在开头),特定字符串可能多个,比如aaa、bbb,如找到该行有三种情况,一包含字符串abcd直接输出该行;二不包含在结尾添加,abcd输出;三如果该行=后面为空就直接加abcd输出。其他不含aaa、bbb的行直接整行输出,以上输出内容保存到新文件,源文件的顺序不能错,某行格式如下:aaa = *12123-acmd

温馨提示:答案为网友推荐,仅供参考
相似回答