Работая над сценарием, который вычисляет и выводит в файл общую цикломатическую сложность тестируемого проекта, я пытаюсь отфильтровать файлы, имена которых (включая путь) содержат слово "тест". (Такие файлы существуют только для целей тестирования и поэтому освобождаются от вычислений.)

Пока у меня есть следующий код:

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% всегда равен нулю.

2 ответа2

2

Как обнаружил спрашивающий, %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 окружающая ее группа команд может быть удалена.

0
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"
)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .