在编写一个脚本来计算并输出被测项目的总圈复杂度到文件时,我试图过滤掉名称(包括路径)包含“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
命令是唯一需要的命令,则可以删除其周围的命令组。