在CMD中过滤名称包含关键字的文件

在CMD中过滤名称包含关键字的文件

在编写一个脚本来计算并输出被测项目的总圈复杂度到文件时,我试图过滤掉名称(包括路径)包含“test”的文件。(此类文件仅用于测试目的,因此无需计算。)

到目前为止,我有以下代码:

rem write temporary file, to append command line output to
SETLOCAL 
SET tmpfile=tmp_ComplexityAnalysis.txt
echo. 2>%tmpfile%
rem perform cyclomatic complexity analysis on all the files, iff those files are not test files and have some functions in them
echo %tmpfile%
for /R apiserver_sdk %%G in (*.go) DO (
    rem filter out "test" files
    gocyclo %%G >> %tmpfile%
)

我不知道如何排除“测试”或在哪里。

更新:将 for 循环主体更改为:

DIR /A %%G| findstr test
IF %ERRORLEVEL% NEQ 0 (
    rem filter out "test" files
    gocyclo %%G >> %tmpfile%
)

不起作用,因为不知何故%ERRORLEVEL%总是零。

答案1

正如提问者所发现的,%ErrorLevel%没有被设置。我不知道延迟扩展是否!ErrorLevel!会起作用,但我发现正在findstr设置其返回值,因此以下任一脚本都可以工作:-

for /R apiserver_sdk %%G in (*.go) DO (
    rem filter out "test" files
    echo %%G | findstr /i test
    if errorlevel 1 ( 
        gocyclo %%G >> %tmpfile%
    )
)

或者:-

for /R apiserver_sdk %%G in (*.go) DO (
    rem filter out "test" files
    echo %%G | findstr /i test || (
        gocyclo %%G >> %tmpfile%
    )
)

如果该gocyclo命令是唯一需要的命令,则可以删除其周围的命令组。

答案2

DIR /B | FOR /F %x IN ('FIND "test"') DO (
    ECHO Execute something using "%x"
)

向后,要排除"test"名称中包含子字符串的文件 -/V在命令中添加键FIND

截屏

目录中所有路径名中.go没有的文件都需要这样做"test"

DIR /B *.go | FOR /F %x IN ('FIND /V "test"') DO(
    ECHO Execute something using "%x"
)

相关内容