Batch file bat文件中文本文件的嵌套findstr
我使用以下bat代码在一组文本文件中查找字符,并在找到的行后插入新行:Batch file bat文件中文本文件的嵌套findstr,batch-file,Batch File,我使用以下bat代码在一组文本文件中查找字符,并在找到的行后插入新行: for /R "%SrcFolder%" %%a in ("*.txt") do ( (for /f "usebackq delims=" %%h in ("%%a") do ( echo %%h echo "%%h"|findstr /I "{" > nul & if not errorlevel 1 ( echo NEW LINE ) ) 现在我想使用另一
for /R "%SrcFolder%" %%a in ("*.txt") do (
(for /f "usebackq delims=" %%h in ("%%a") do (
echo %%h
echo "%%h"|findstr /I "{" > nul & if not errorlevel 1 (
echo NEW LINE
)
)
现在我想使用另一个findstr来检查当前行的前一行(%%h)是否有特定字符(如“B”),如果有,则跳过插入新行
我希望我能问清楚。
有什么建议吗?
谢谢 试试这个:
@ECHO OFF &SETLOCAL disableDelayedExpansion
SET "InFileName=infile.txt"
SET "OutFileName=outfile.txt"
(FOR /f "delims=" %%a IN ('FINDSTR /n "^" "%InFileName%"') DO (
SET "PrimLine=%%a"
SETLOCAL enableDelayedExpansion
SET "Line=!PrimLine:*:=!"
ECHO(!Line!
ECHO("!Line!"|FINDSTR "}" >nul && (
SET "SecLine=!SecLine:*:=!"
ECHO("!SecLine!"|FINDSTR /i "B" >nul || ECHO(
)
ENDLOCAL
SET "SecLine=%%a"
))>"%OutFileName%"
下面的批处理代码满足您的要求:
@echo off
setlocal EnableDelayedExpansion
for /R "%SrcFolder%" %%a in ("*.txt") do (
echo File: "%%a"
set "prevLine="
for /f "usebackq delims=" %%h in ("%%a") do (
echo %%h
rem Check if current line have "{" char:
set thisLine=%%h
if "!thisLine:{=!" neq "!thisLine!" (
rem YES: Check if previous line have "B" char:
if "!prevLine:B=!" equ "!prevLine!" (
rem NO: insert the new line
echo NEW LINE
)
)
set "prevLine=!thisLine!"
)
echo -------------------
echo/
)
但是,此方法不使用findstr
,很抱歉
findstr.exe
是一个外部命令,每次执行时都需要加载约30 KB的文件。如果对文件的每一行执行findstr
,有时执行两次,则程序的运行速度将比仅使用内部命令慢。如果一个文件很大,或者文件的数量很大,这两种方法之间的差异将非常明显…@ECHO OFF
SETLOCAL
设置“srcfolder=。\cb4c”
对于“*.txt”中的/R“%SrcFolder%”%%a,请执行以下操作(
设置“checkme=Y”
对于/f“usebackq delims=“%%h in(“%%a”)do(
回声%%h
如果定义了,请检查我(
回显“%%h”| findstr/I“{”>NUL
如果不是错误级别1(回显新行)
)
回声“%%h”| findstr“B”>num
如果错误级别为1(设置“checkme=Y”),则为其他(设置“checkme=”)
)
)
后藤:EOF
(我已将
srcfolder
的测试设置保留在原位)感谢您的回复。但是,即使代码中的这一行没有“{”字符:if”!thisLine:{=!“neq”!thisLine!”(只需在命令提示下测试它。输入:set var=这不包含左大括号
,然后输入如果“%var:{=%”neq“%var%”回显失败:即使var不包含左大括号,也始终为真,并检查结果!