Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 根据用户存在情况执行特定命令_Windows_Batch File_Wmic - Fatal编程技术网

Windows 根据用户存在情况执行特定命令

Windows 根据用户存在情况执行特定命令,windows,batch-file,wmic,Windows,Batch File,Wmic,在批处理文件中,我需要检查给定的用户是否存在,然后根据结果执行不同的命令 用户名在调用cmd的bat文件时作为参数 我想要的是这样的东西: IF userExists ( do something ) else ( do something else ) 下面的代码可以检索匹配结果的数量,但我未能在IF语句中使用它 set username=%1 set searchUser="net user |find /c %username% " for /F "tokens=*" %

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

用户名在调用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
,或者有更好的方法吗?

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

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

如果您只是想确定某个特定的用户帐户是否存在,而不是同一台电脑上存在多少个匹配的用户名,那么我建议您使用以下替代方法:

@Echo关闭
设置“ProfilePath=”
对于/F“Skip=1Delims=“%%A In('WMIC UserAccount Where^
“LocalAccount='TRUE'和Name=''%1''Get SID 2^>Nul')在(“%A”中为/F%%B执行操作”
)Do For/F“Tokens=2Delims==”%%C In('WMIC Path Win32_UserProfile其中^
“SID='%%B'和特殊!='True'”获取本地路径/值2^>Nul'
)Do For/F“Tokens=*”(%%C)中的%%D Do Set“ProfilePath=%%D”
如果已定义ProfilePath(回送用户配置文件%1存在于%ProfilePath%),则为%1,否则(
回显用户配置文件%1不存在)
暂停
包含
If
命令和
Pause
只是为了向您显示后续命令的
If
|
Else
结构(显然可以根据需要修改/更改)

如果不需要知道和/或访问用户配置文件路径,可以大大简化命令:

@Echo关闭
WMIC UserAccount,其中“LocalAccount='TRUE'和Name='%~1'”获取SID 2>Nul |查找“S-”>Nul&&(
回送用户配置文件%1存在)| |回送用户配置文件%1不存在
暂停

如果您只是想确定某个特定的用户帐户是否存在,而不是同一台电脑上存在多少个匹配的用户名,那么我建议您使用以下方法:

@Echo关闭
设置“ProfilePath=”
对于/F“Skip=1Delims=“%%A In('WMIC UserAccount Where^
“LocalAccount='TRUE'和Name=''%1''Get SID 2^>Nul')在(“%A”中为/F%%B执行操作”
)Do For/F“Tokens=2Delims==”%%C In('WMIC Path Win32_UserProfile其中^
“SID='%%B'和特殊!='True'”获取本地路径/值2^>Nul'
)Do For/F“Tokens=*”(%%C)中的%%D Do Set“ProfilePath=%%D”
如果已定义ProfilePath(回送用户配置文件%1存在于%ProfilePath%),则为%1,否则(
回显用户配置文件%1不存在)
暂停
包含
If
命令和
Pause
只是为了向您显示后续命令的
If
|
Else
结构(显然可以根据需要修改/更改)

如果不需要知道和/或访问用户配置文件路径,可以大大简化命令:

@Echo关闭
WMIC UserAccount,其中“LocalAccount='TRUE'和Name='%~1'”获取SID 2>Nul |查找“S-”>Nul&&(
回送用户配置文件%1存在)| |回送用户配置文件%1不存在
暂停

第一种方法对我不起作用。现有和不存在的usenames都返回用户存在message@GerhardBarnard您可以在第一个示例的末尾添加一个空格(
/C:“^%myuser%”
),这样它将只匹配完整的用户名。@montonero,是的,谢谢。但我用词的边界来结束它。@montonero:在我的系统中,
net user
以列的形式列出它们,三列一行,因此“行的开始”不是一个选项。@GerhardBarnard第一种方法很适合我,效果很好。谢谢(:Sipliy,我避免了errorlevel用法,所以我没有测试第二种方法,但感谢选项(:第一种方法对我不起作用。现有和不存在的usenames都返回user existsmessage@GerhardBarnard您可以在第一个示例的末尾添加一个空格(
/C:“^%myuser%”
)所以它将只匹配完整的用户名。@montonero,是的,谢谢。但是我用单词边界来修饰它。@montonero:在我的系统中,
net user
以列的形式列出它们-三行-因此“行的开始”不是一个选项。@GerhardBarnard第一种方法很适合我,效果很好。谢谢(:Sipliy,我避免使用errorlevel,因此我没有测试第二种方法,但感谢您的选择(:您的任务对我来说毫无意义。您的本地系统上不应该有多个同名用户,因此您试图确定什么?尽管如此,即使有两个同名用户,
net user
命令的输出可能如下所示,
Administrator FallenAngelFallenAngel
,因为
Find/C
只计算匹配的行数,这将返回
1
,尽管显然存在
2
。您的任务是否只是试图确定本地系统上是否有一个简单的同名用户?如果是,请查看我的答案,这应该会起作用。@Compo我的主要目标是删除判断用户是否存在。您的任务对我来说毫无意义。您的本地系统上不应该有多个同名用户,那么您想确定什么?尽管如此,即使有两个同名用户,
net user
命令的输出可能如下所示,
AdministratorFallenAngel FallenAngel
由于
Find/C
只计算匹配行,因此尽管存在
2
,但这将返回
1
。您的任务是否只是试图确定是否存在一个用户