You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用FINDSTR解析net users输出的用户并批量执行net user命令?

在Windows中批量提取用户名并执行net user命令

方法一:使用批处理脚本

针对需求,直接用批处理即可实现提取带空格的用户名并逐个执行命令,无需复杂正则匹配:

@echo off
setlocal enabledelayedexpansion

:: 遍历net users输出的有效行,跳过无关内容
for /f "skip=4 tokens=*" %%a in ('net users') do (
    :: 判断是否为命令成功提示行,是的话退出循环
    if "%%a"=="The command completed successfully." goto :endloop
    
    :: 将当前行的多个空格替换为单个分隔符(这里用|)
    set "line=%%a"
    set "line=!line:  =|!"
    :: 再次替换,确保所有多空格都变成单个|
    set "line=!line:  =|!"
    
    :: 遍历分割后的每个用户名
    for /f "delims=| tokens=1,2,3" %%b in ("!line!") do (
        if not "%%b"=="" net user "%%b"
        if not "%%c"=="" net user "%%c"
        if not "%%d"=="" net user "%%d"
    )
)
:endloop
endlocal

脚本说明:

  • skip=4:跳过net users输出的前4行(命令行提示、空行、用户账户标题、分隔线)
  • 两次替换 =|:把所有两个及以上的空格替换为|,作为用户名的分隔符
  • 用tokens=1,2,3提取每行最多3个用户名,判断非空后执行net user命令

方法二:使用PowerShell(更简洁)

如果允许使用PowerShell,处理字符串分割会更灵活:

# 获取net users输出,过滤出含用户名的行,排除无关行
$userLines = net users | Select-Object -Skip 4 | Where-Object { $_ -notmatch "The command completed successfully." }

foreach ($line in $userLines) {
    # 按一个或多个空格分割行,过滤空元素,得到用户名列表
    $users = $line -split '\s+' | Where-Object { $_ }
    foreach ($user in $users) {
        # 执行net user命令
        net user $user
    }
}

说明:

  • -split '\s+':用正则匹配一个或多个空格分割字符串,自动保留用户名里的单个空格
  • Where-Object { $_ }:过滤分割后产生的空字符串元素

内容的提问来源于stack exchange,提问作者Rodrigo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 18:03:33