Выполнить определенную команду в соответствии с существованием пользователя - PullRequest
0 голосов
/ 15 мая 2019

В пакетном файле мне нужно проверить, существует ли данный пользователь, затем выполнить разные команды в соответствии с результатами.

Имя пользователя принимается в качестве параметра во время вызова файла bat на cmd.

Что-то вроде этого:

IF userExists (
    do something
) else (
    do something else
)

Следующий код может получить количество подходящих результатов, но мне не удалось использовать его в операторе IF.

set username=%1
set searchUser="net user |find /c %username% "
for /F "tokens=*" %%i IN (%searchUser%) do set userCount=%%i

Я ожидаю использовать userCount в операторе if, но не смог этого сделать.

Как я могу использовать мой userCount в утверждении if, или есть лучший подход к этому?

Ответы [ 2 ]

1 голос
/ 15 мая 2019

Если вы просто пытаетесь определить, существует ли конкретная учетная запись пользователя, а не сколько совпадающих имен пользователей существует на одном ПК, тогда я бы предложил эту альтернативу :

@Echo Off
Set "ProfilePath="
For /F "Skip=1Delims=" %%A In ('WMIC UserAccount Where^
 "LocalAccount='TRUE' And Name='%~1'" Get SID 2^>Nul') Do For /F %%B In ("%%A"
) Do For /F "Tokens=2Delims==" %%C In ('WMIC Path Win32_UserProfile Where^
 "SID='%%B' And Special!='True'" Get LocalPath /Value 2^>Nul'
) Do For /F "Tokens=*" %%D In ("%%C") Do Set "ProfilePath=%%D"
If Defined ProfilePath (Echo User Profile %1 exists at %ProfilePath%) Else (
    Echo User Profile %1 does not exist)
Pause

Команда If вместе с Pause включены только для того, чтобы показать вам структуру If | Else для ваших дальнейших команд, (они, очевидно, могут быть изменены / изменены по мере необходимости) .

Если вам не нужно знать и / или обращаться к пути профиля пользователя, вы можете значительно упростить команду:

@Echo Off
WMIC UserAccount Where "LocalAccount='TRUE' And Name='%~1'" Get SID 2>Nul|Find "S-">Nul && (
    Echo User Profile %1 exists) || Echo User Profile %1 does not exist
Pause
1 голос
/ 15 мая 2019

Во-первых, %username% - это предопределенная переменная среды, выберите еще что-нибудь, например myuser

В соответствии с вашей первоначальной попыткой с использованием счетчика.

@echo off
set myname=%~1
for /F %%i IN ('net user ^| find /I /C "%myname% "') do (
if not "%%i"=="0" (
   echo found %%i Matches of username
  ) else (
   echo %%i matches found.
 )
)

Иначе, с использованием %errorlevel%

@echo off
set "myuser=%~1"
net user |findstr /I /R /C:"\<%myuser%\>"
if not "%errorlevel%"=="0" (
   echo %myuser% does NOT exist!
 ) else (
   echo %myuser% exists!
)

В качестве альтернативы в цикле for:

@echo off
set "myuser=%~1"
for /f %%i in ('net user ^| findstr /I /R /C:"\<%myuser%\>"') do (
   if /i "%%i"=="%myuser%" echo myusers exists!
  ) else (
   echo %myuser% does NOT exist!
 )
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...