Filtre os arquivos cujos nomes contenham uma palavra-chave no CMD

0

Ao trabalhar em um script que calcula e gera em um arquivo as complexidades ciclomáticas totais de um projeto em teste, estou tentando filtrar os arquivos cujos nomes (incluindo path) contêm "test". (Esses arquivos só existem para fins de teste e, portanto, estão isentos de computação.)

Até agora, tenho o seguinte código:

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%
)

Eu não sei como excluir "teste" ou onde.

UPDATE : Alterando o corpo do loop for para:

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

não funciona porque, de alguma forma, %ERRORLEVEL% é sempre zero.

    
por Mike Warren 19.09.2018 / 19:02

2 respostas

2

Como o questionador descobriu, %ErrorLevel% não está sendo definido. Não sei se a expansão atrasada e !ErrorLevel! funcionariam, mas o que eu descobri foi que findstr está definindo seu valor de retorno, portanto, um dos seguintes scripts funciona: -

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

ou: -

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

Se o comando gocyclo for o único necessário, o grupo de comando em torno dele poderá ser removido.

    
por 19.09.2018 / 23:50
0
DIR /B | FOR /F %x IN ('FIND "test"') DO (
    ECHO Execute something using "%x"
)

Para trás, para excluir arquivos que contenham "test" substring em um nome - adicione /V key ao comando FIND .

thisneedstohappenforallthe.gofilesinthedirectorythatdon'thave"test" in their pathnames

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