0

私はこのスクリプトを持っています:

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:%%セクション%%=% そして ! を使用して 私に少なくとも1つを表示する以外は何も達成していないようです。

そして、はい、少しすると、そこにランダムながらくたを投げ始めました(イライラしました)。

では、これを機能させる適切な方法は何ですか?

ありがとう

4

3 に答える 3

3

これを試して:

@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%
于 2013-08-04T08:20:44.053 に答える