根据用户的存在执行特定的命令

时间:2019-05-15 08:25:31

标签: windows batch-file

在批处理文件中,我需要检查给定用户是否存在,然后根据结果执行不同的命令。

在cmd上的bat文件调用期间,将用户名作为参数。

我想要的是这样的

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

我希望在if语句中使用userCount,但没有这样做。

如何在if语句中使用userCount,还是有更好的方法?

2 个答案:

答案 0 :(得分:1)

首先,%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!
 )
)

答案 1 :(得分:1)

如果您只是想确定某个用户帐户是否存在,而不是确定同一台PC上存在多少个匹配的用户名,那么我建议您使用这种替代方案:

@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