忽略 IF 查询中的 TAB



我正在编写一个脚本来计算批处理脚本中的每个注释行,但我遇到了问题。现在,它只计算一行开头的每个REM。如果在一个(或多个(TAB之后有一个REM,则不计算该行。

SETLOCAL EnableDelayedExpansion
SETLOCAL enableextensions
If "%1"=="" (
ECHO When starting the script, please pass the name of the script to be used as a parameter.
GOTO :eof
)
REM ---------------SETTING_VARIABLES------------------------START-----------------------------------------------------------------------
set Script_Name=%1
set LOGFILE_NAME=%DATE:~-7,2%_%1_SCP_V1.log
set CSV_NAME=%1_SCP_V1.csv
set REM_Counter=0
set ALL_Counter=0
REM ---------------SETTING_VARIABLES------------------------END-----------------------------------------------------------------------

REM ---------------COUNTING_ROWS------------------------START-----------------------------------------------------------------------
FOR /f "tokens=1 delims= " %%a in (.%Script_Name%) DO (
    set result=false
    IF "%%a"=="REM" (
        set result=true
        )
    IF "%%a"=="@REM" (
        set result=true
        )
    IF "!result!"=="true" (
        set /a REM_Counter=!REM_Counter!+1
        set /a ALL_Counter=!ALL_Counter!+1
        ) else (
            set /a ALL_Counter=!ALL_Counter!+1
            )
)
echo %REM_Counter%
echo %ALL_Counter%
REM ---------------COUNTING_ROWS------------------------END-----------------------------------------------------------------------

蝙蝠示例:

ECHO OFF
    REM 1
    REM 2
    REM 3
    @REM 4
    @REM 5
        REM 6
            REM 7
    bla 
    adwd
     wadg
     g
     awdaw
     daw

REM 6 和 7 不计入REM_Counter。

只需将 TAB 添加到分隔符中:delims=<tab><space>

正如 Compo 在注释中指出的那样,TAB 和 SPACE 是默认分隔符(tokens=1也是默认的(,因此您可以省略这两个参数:

FOR /f %%a in (.%Script_Name%) DO (

当然,您可以保留它们以提高可读性(我会的(。

最新更新