如何在for循环中查找replacevariables的格式

我有这个脚本:

setlocal EnableDelayedExpansion set SECTION=dispid 3 set TARGET=pushscope @echo on for /F "tokens=1* delims=:" %%a in ('findstr /N /C:"%SECTION%" /C:"%TARGET%" %CHECKER%') do ( if not defined StartSection ( if not %%b==%%b:%SECTION%=% set StartSection=%%a ) else ( goto :EOF if not defined TargetLine ( goto :EOF :: Do nothing yet if not %%b equ !%%b:%TARGET%=! set TargetLine=%%a& goto checkercont ) ) ) 

在StartSection(问题区域),我试图做一个查找和replace,以确认这一行是我想要的,并保存该行号。

我该如何编写它才能正确parsingvariables并正确地进行查找和replace?

我试过了 “[%b]”表示被replace的%% b:

 %%b:%SECTION%=% returns "[%b]:dispid 3=a" (Yes, it somehow gives me an 'a'). !%b:%SECTION%=! returns "!SECTIONa" !%%b:%SECTION%=! returns "![%b]:dispid 3=!" (which then gives me an error saying 3 is not a command) !%b:%SECTION%=%! returns "!SECTION!" !%%b:!SECTION!=! returns "![%b]:!SECTION!=!" %b:%%SECTION%%=% return "dispid 3" (and error) 

我觉得最后一个parsing大胆然后是斜体。 %b:%% SECTION %%=%使用! 似乎从来没有完成任何事情,除了显示至less一个回到我身边。

是的,一点点之后,我就开始随便扔垃圾了(感到沮丧)。

那么得到这个工作的正确方法是什么?

谢谢

最难回答的问题是"This doesn't work - how do I fix it?" 问题 – 所需要的唯一线索是OP承认的结构不能正常工作…相当需要的是相当耗尽ol水晶球 – 而现在的修理成本真的是吃到了蝙蝠的翅膀和蜥蜴的舌头预算…

我真的无法弄清楚双反转的痴迷是怎么一回事。 为什么if not condition thingtwo else thingoneif condition thingone else thingtwo怎么了? 也许我只是过时的 – 但也许在一些荒谬的方式是政治上不正确或dicriminatory。

因此,在检查的情况下,假设期望的结果是确定文件%checker% (其中没有提供样本)中的dispid 3之后出现的第一个dispid 3的行数和包含pushscope的行的行数。 。)

 @ECHO OFF SETLOCAL set SECTION=dispid 3 set TARGET=pushscope SET checker=sourcefile.txt SET startsection= SET targetline= for /F "tokens=1* delims=:" %%a in ('findstr /N /C:"%SECTION%" /C:"%TARGET%" %CHECKER%') do ( IF DEFINED startsection ( IF NOT DEFINED targetline ( ECHO %%b|FIND "%target%">NUL IF NOT ERRORLEVEL 1 SET targetline=%%a ) ) ELSE ( ECHO %%b|FIND "%section%">NUL IF NOT ERRORLEVEL 1 SET startsection=%%a ) ) ECHO startsection=%startsection% targetline=%targetline% GOTO :EOF 

哪一个为我工作。 因人而异。

尝试这个:

 @ECHO OFF &SETLOCAL for /F "delims=:" %%a in ('findstr /N /C:"%SECTION%" "%CHECKER%"') do if not DEFINED StartSection set "StartSection=%%a" IF NOT DEFINED StartSection (ECHO StartSection %section% NOT found&goto:eof) for /F "delims=:" %%a in ('MORE +%StartSection% "%CHECKER%" ^|findstr /N /C:"%TARGET%"') do if not DEFINED TargetLine set "TargetLine=%%a" ECHO StartSection at line #%StartSection% IF NOT DEFINED TargetLine (ECHO TargetLine %target% NOT found) ELSE ECHO TargetLine at line #%TargetLine% 

打扰一下。 我想我不明白你试图用这一行来达到什么目的:

 if not %%b==%%b:%SECTION%=% set StartSection=%%a 

你必须认识到, %%b包含从文件读取的 ,而不是一个变量! 我们来分析一下这个例子:

 !%%b:%SECTION%=! 

如果%%b将包含变量的名称 ,那么上一行将从中删除SECTION的值。 但是, %%b不包含变量的名称,而是包含从文件中读取的

如果你想检查从文件读取的行是否包含SECTION给出的字符串,那么你应该这样做:

 setlocal EnableDelayedExpansion set SECTION=dispid 3 set TARGET=pushscope @echo on for /F "tokens=1* delims=:" %%a in ('findstr /N /C:"%SECTION%" /C:"%TARGET%" %CHECKER%') do ( if not defined StartSection ( set "line=%%b" if not "!line!" == "!line:%SECTION%=!" set StartSection=%%a ) else ( . . .