如何用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
相关产品推荐
相关产品推荐

