findstr возвращает неверный код ошибки внутри блока - PullRequest
0 голосов
/ 06 июня 2019

При выполнении цикла уровень ошибки, на который ссылается !errorlevel!, возвращает 1 вместо 0, даже если утверждение верно.setlocal enabledelayedexpansion включено

Я попытался переставить операторы IF, попытался с помощью циклов GOTO поместить проверку ошибок вне функционального блока.Пробовал %ERRORLEVEL% и !ERRORLEVEL!

Цель этого цикла - проверить текстовый файл на наличие списка имен пользователей, если имя пользователя существует в файле, добавить этого пользователя в группу localadmins.

rem == Count number of users in backup, create variable of user{num} for each username ==

set /p s=<"%custompath%\%uname%\users.txt"
set s=%s:~0,-1%
set /a counter=0
for %%a in (%s:,= %) do (
    set /a counter+=1 
    set user!counter!=%%a
    )

set /a count = 0

:CUSTOM_LOOP_ADMIN

rem == Adds user to Admin group on new computer if they were previously in local Administrators ==

if %count% LEQ %counter% (
    set /a count +=1
    IF NOT [!user%count%!]==[] (
        findstr /m "!user%count%!" "%custompath%\%uname%\Localadmins.txt" > nul
        IF !ERRORLEVEL!==0 (
            net localgroup Administrators NET\!user%count%! /add > nul 2> nul
            net localgroup Administrators !user%count%! /add > nul 2> nul
            echo.
            echo Added !user%count%! to local Administrators group
        )
    )

    goto :CUSTOM_LOOP_ADMIN )


GOTO :EOF

Ожидаемый результат равен !ERRORLEVEL!, равному 0, если имя пользователя находится в текстовом файле, и возвращает ненулевое значение, если его нет, и продолжает цикл.

EDIT:

Я идиот ...

findstr по умолчанию чувствителен к регистру.разрешается с помощью findstr /m /i "sometext" "sample.txt" > nul

...