При выполнении цикла уровень ошибки, на который ссылается !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