Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 如何格式化for循环中的find-replace变量_Windows_Batch File - Fatal编程技术网

Windows 如何格式化for循环中的find-replace变量

Windows 如何格式化for循环中的find-replace变量,windows,batch-file,Windows,Batch File,我有这个剧本: 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:%SECTIO

我有这个剧本:

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(问题区域)中,我试图进行查找和替换,以确认这一行是我想要的,并保存该行号

如何编写它,以便它正确地解析变量,并正确地查找和替换变量

我试过的。“[%b]”表示替换的%%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)
我觉得对于最后一个,它先解析粗体,然后解析斜体%b:%%%SECTION%%%%=%% 和使用!除了向我展示至少一个,我似乎从未完成任何事情

是的,过了一会儿,我就开始往里面乱扔垃圾(很沮丧)

那么,怎样才能让这一切正常运转呢


谢谢

最难回答的问题是
“这不起作用-我该如何修复它?”
问题-这里需要的唯一线索是OP承认不起作用的结构。。。对所需物品的预测会使水晶球磨损,而如今的维修费用会消耗蝙蝠翅膀和蜥蜴舌头的预算

我也真的搞不懂为什么痴迷于双反转。为什么
如果不是条件,那么两个其他的条件是一个
??如果条件项为一项或两项,则
有什么问题?也许我只是个守旧的人——但也许这在政治上是不正确的,或者以某种荒谬的方式具有歧视性

因此-在正在检查的情况下,假设所需结果是确定文件
%checker%
中第一个
dispid 3
的行号以及包含
pushscope
的行的行号,该行号出现在
%checker%
文件中的
dispid 3
之后(未提供样本…)


这对我很有用。YMMV.

最难回答的问题是
“这不起作用-我该如何修复它?”
问题-其中唯一需要的线索是OP承认不起作用的结构。。。对所需物品的预测会使水晶球磨损,而如今的维修费用会消耗蝙蝠翅膀和蜥蜴舌头的预算

我也真的搞不懂为什么痴迷于双反转。为什么
如果不是条件,那么两个其他的条件是一个
??如果条件项为一项或两项,则
有什么问题?也许我只是个守旧的人——但也许这在政治上是不正确的,或者以某种荒谬的方式具有歧视性

因此-在正在检查的情况下,假设所需结果是确定文件
%checker%
中第一个
dispid 3
的行号以及包含
pushscope
的行的行号,该行号出现在
%checker%
文件中的
dispid 3
之后(未提供样本…)

这对我很有用。YMMV.

试试这个:

@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%
试试这个:

@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
包含变量名,则前一行将从中删除
部分的值。但是,
%%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 (
. . .

对不起。我想我不明白你用这句话想达到什么目的:

if not %%b==%%b:%SECTION%=% set StartSection=%%a
您必须意识到
%%b
包含从文件中读取的一行,而不是一个变量!让我们分析一下这个例子:

!%%b:%SECTION%=!
如果
%%b
包含变量名,则前一行将从中删除
部分的值。但是,
%%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 (
. . .

else(goto:EOF如果没有定义…)
你确定吗?它是用来调试的,你可以忽略它-它是一个大的批处理文件,因此跳到最后会更快地给我结果
else(goto:EOF如果没有定义…)
你确定吗?它是用来调试的,你可以忽略它-它是一个大的批处理文件,因此,跳到最后给了我快速的结果。我不理解你的第一段。我不只是给我的脚本,并说修复它。我陈述了问题所在,我试图用这句话完成什么,以及我尝试过的解决方案。如果你想重写代码,那是你的特权。我不理解你的第一段。我不只是给我的脚本,并说修复它。我陈述了问题所在,我试图用这句话完成什么,以及我尝试过的解决方案。如果你想重写代码,那是你的特权。只是看看,这是行不通的。原因是StartSection将设置在第1行,然后TargetLine将变为第2行。总是。因此,我正在进行查找替换,以确保StartSection是我想要的字符串。从那里,目标的下一次出现将是所需的行。我的方法很好-只需要找出查找替换部分。代码假设,
部分
目标
之前,并且在第一行和
目标
之间没有额外的
部分
字符串。对不起,我不确定我在想什么。但目标在节之前出现多次。提供时,StartSection将设置为目标,而不是节。(请注意搜索中的两个参数)。因此,在设置StartSection之前需要验证行中是否包含节。为了澄清这一点,您的脚本假定节始终位于目标之前,但是,目标出现了数百次,而节只出现了1次。