我正在尝试创建一个非常简单的脚本,将显示c:users
中的所有用户配置文件,如:
%User1%
%User2%
我已经尝试使用WMIC与循环,它只是挂起....
for /f "tokens=* skip=1" %%a in ('wmic UserAccount get Name') do (
if not "%%a"=="" (
)
)
如有任何帮助,不胜感激。
下面的例子,不像我在我的评论中提供的,应该只列出'正常'的用户名,谁有他们的本地配置文件位置在C:Users
我所说的"正常"是指它应该忽略诸如"默认"、"访客"one_answers"管理员"之类的帐户。
请注意,正如我在前面提到的评论中已经提到的,UserName对于当前在系统中的用户来说是正确的,但可能不一定是在他们的配置文件目录父名称中使用的名称。
@Echo Off & SetLocal EnableExtensions
For /F Tokens^=2^ Delims^=^" %%G In ('%SystemRoot%System32wbemWMIC.exe Path
Win32_UserProfile Where "Special!='TRUE' And LocalPath Like 'C:\Users\%%'"
Assoc:List 2^>NUL') Do For /F Tokens^=4^ Delims^=^" %%H In ('
%SystemRoot%System32wbemWMIC.exe UserAccount Where "SID='%%G'" Assoc:List
/ResultRole:SID 2^>NUL') Do Echo %%H
Pause
如果您打算通过CLI(而不是通过GUI)运行此批处理文件,则可以删除脚本底部的Pause
命令。
您也可以直接在命令提示符中运行它:
For /F Tokens^=2^ Delims^=^" %G In ('%SystemRoot%System32wbemWMIC.exe Path Win32_UserProfile Where "Special!='TRUE' And LocalPath Like 'C:\Users\%'" Assoc:List 2^>NUL') Do @For /F Tokens^=4^ Delims^=^" %H In ('%SystemRoot%System32wbemWMIC.exe UserAccount Where "SID='%G'" Assoc:List /ResultRole:SID 2^>NUL') Do @Echo %H
试试这个批处理脚本:
@echo off
Call :WMICGET_ECHO UserAccount Name " Name : "
Pause & Exit
::---------------------------------------------------------------------------------------------------------------------------------------
rem Based on this answer: https://stackoverflow.com/a/63153964/8262102
:WMICGET_ECHO
@for /f "skip=1 delims=" %%a in ('"wmic %1 get %2"') do (@for /f "delims=" %%b in ("%%a") do echo %~3 %%~nb & set "WMICGET_VALUE=%%~nb")
goto :EOF
::---------------------------------------------------------------------------------------------------------------------------------------
dir /B "%systemdrive%users" | findstr /l /v Public