获取本地机器所有用户列表的批处理脚本

Batch script to acquire all users list of local machine

用于查找除当前登录用户和其他默认用户之外在本地计算机上拥有帐户的所有用户的批处理脚本。

代码:

@echo off
SET "Value="
SET Users="dir C:\Users\ /B"
FOR /F "tokens=1*" %%A IN ('%Users%') DO (
    SET "Name=%%A"
    IF /I "%NAME%" NEQ "Administrator" (
        IF /I "%NAME%" NEQ "Public"(
            IF /I "%NAME%" NEQ %USERNAME% (
                SET "Value=%Value% "
                SET "Value=%Value%%%A"

            )
        )
    )
)
echo %Value%

这个逻辑对吗?语法有问题。接受建议。 我想将所有用户存储在一个变量中。

我认为上面的脚本在更正后会 o/p 像这样: user1 user2...

但我想使用换行函数而不是 space 作为分隔符。像 :

user1
user2
@echo off
SET "Value="
SET Users="dir C:\Users\ /B"
setlocal enableDelayedExpansion
FOR /F "tokens=1*" %%A IN ('%Users%') DO (
    SET "Name=%%A"
    IF /I "!NAME!" NEQ "Administrator" (
        IF /I "!NAME!" NEQ "Public" (
            IF /I "!NAME!" NEQ !USERNAME! (
                SET "Value=!Value! "
                SET "Value=!Value!%%A"

            )
        )
    )
)
echo %Value%

您需要 delayed 扩展,但您在左括号之一之前遗漏了一个 space。

小更正: 获取用户文件夹名称,适用于winXP或更高版本。 为用户文件夹上的空格添加了“”(即:“文档和设置”)。 Delims=\ 获取带空格的用户目录名。 DIR /ad-h 选项仅列出 USERS 文件夹中的目录,并确保不显示隐藏的目录 (-h) %USERNAME% 需要包围 "":

@echo off
SET "Value="
FOR %%i IN ("%USERPROFILE%") DO set USERSDIR=%%~di%%~pi
FOR /F "Delims=\" %%A IN ('dir /ad-h "%USERSDIR%" /B') DO (
  IF /I "%%A" NEQ "Administrator" (
    IF /I "%%A" NEQ "Public" (
      IF /I "%%A" NEQ "%USERNAME%" (
        SET Value=!Value! "%%A"
      )
    )
  )
)
echo Value=%Value%