如何为命令 net user 在列表中返回的每个用户运行批处理文件?

2024-04-19

我的目标是制作一个通用代码,循环遍历计算机中的所有用户帐户名称并将输出发送到批处理文件。 “net user”命令输出用户列表,但我想将每个用户名分配给一个参数。所以我应该使用for /f命令去做。这可能看起来很简单,但请记住用户名可能在任何位置包含空格:开头、结尾或中间,此外,还可以找到 2 个连续的空格

提示1:用户名的最大长度为20个字符
提示 2:循环需要遍历错误的用户名,因此需要检查它们是否有效。命令net user "uName" sets %ErrorLevel%如果用户名“uName”(例如)有效,则为 0。

如果没有办法,也许 VBScript 可以使用每个用户帐户名启动批处理文件。

Edit:我终于编写了自己的代码,但是只需要15个帐户就需要大约5秒。

我想要一个更好的解决方案,也许使用另一种编程语言。

setlocal EnableDelayedExpansion
For /f "skip=4 delims=" %%I in ('net user') do (
    Set "Line=%%I"
    If not "!Line:~-1,1!" == "." for %%I in (0,25,50) do (
        Set "Name=!Line:~%%I,20!"
        Call :setName
    )
)

Set Name=
:setName
If not "!Name!" == "" (
    Net user "!Name!" && %~dp0Test.bat "!Name!"
    If not "!Name:~-1,1!" == " " goto:eof
    Set "Name=!Name:~0,-1!"
    Goto setName
)

endlocal

根据我的测试,名称开头或结尾带有空格的用户帐户名是不可能的。用户帐户名称中的非空白字符之间只能有空格。

这是我评论的批处理解决方案,它也不是很快。

@echo off
rem Process output of command 'net user' line by line with skipping
rem the first 4 lines and stopping processing when line with success
rem message is reached which of course depends on language of Windows.
for /F "usebackq skip=4 delims=" %%L in (`%SystemRoot%\System32\net.exe user`) do (
    if "%%L"=="The command was successfully executed." goto :EOF
    call :ProcessAccounts "%%L"
)
goto :EOF

rem Subrountine to process a line with user account names.
:ProcessAccounts
rem Get the line without the double quotes.
set "Line=%~1"

:NextUser
rem Get first 20 characters from line and next remove those 20 characters.
set "Name=%Line:~0,20%"
set "Line=%Line:~20%"

rem Remove all spaces at end of current user account name.
:TrimRight
if "%Name:~-1%"==" " (
    set "Name=%Name:~0,-1%"
    goto TrimRight
)

rem Check if this user account name is valid.
%SystemRoot%\System32\net.exe user "%Name%" 1>nul 2>nul
if not errorlevel 1 (
    echo Valid user account name is: %Name%
    rem Do here what should be done with this user account name.
)

rem Remove leading spaces from remaining line.
:TrimLeft
if "%Line:~0,1%"==" " (
    set "Line=%Line:~1%"
    goto TrimLeft
)

rem Is the shortened line now completely processed?
if not "%Line%"=="" goto NextUser

rem Exit the subroutine ProcessAccounts.
goto :EOF

也许有更好的解决方案来修剪左右空间,请参阅如何删除批处理文件中用户提供的输入的尾随和前导空格? https://stackoverflow.com/questions/3001999/

该批处理文件执行速度慢的原因是:

%SystemRoot%\System32\net.exe user "%Name%" 1>nul 2>nul
if not errorlevel 1 (
    echo Valid user account name is: %Name%
    rem Do here what should be done with this user account name.
)

通过将此块更改为

echo Valid user account name is: %Name%
rem Do here what should be done with this user account name.

使批处理文件变得非常非常快。

用户帐户名的验证net user "%Name%"使批处理文件如此缓慢。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何为命令 net user 在列表中返回的每个用户运行批处理文件? 的相关文章

  • 在 Windows 中使用脚本添加代理设置例外

    我使用的是 Windows 7 并且有一个在启动时初始化的代理配置 每次重新启动电脑时 我都必须重新打开代理设置并手动添加新的代理例外 IP 地址 例如每次重新启动时 www google com www yahoo com www fac
  • VBScript从txt文件中读取多个文件名并列出目录中不存在的文件名

    我是 VB 脚本编写的新手 我试图找到一种方法 读取以文本行形式写入特定文本文件内的文件名列表 检查这些文件是否与脚本位于同一目录中 将不存在的文件名写入输出文件 missing txt 根据我的研究 似乎一个好的方法是使用 FSO 并读取
  • vbs脚本通过ftp发送文件并检查/删除原始文件

    我正在尝试通过 ftp 发送文件 然后检查该过程是否成功完成 如果成功 我将删除原始文件并仅保留在 FTP 上的目标文件夹中发送的文件 我设法修补了一个连接到 FTP 并发送文件的脚本 但我不确定如何将原始文件夹与 FTP 上的文件夹进行交
  • REG ADD - 语法无效

    我试图通过在批处理文件中使用以下代码行来修改注册表中的值 但当我在参数周围使用双引号时 我不断收到 错误 语法无效 而当我使用单引号时 我不断收到 无效的键名 REG ADD HKLM SOFTWARE Microsoft Windows
  • 如何让批处理文件等待另一个批处理文件完成执行?

    如何让一个批处理文件等待另一个批处理文件完成 例如 我有 echo hi gt r txt echo some piece of code gt gt r txt start ar bat echo some piece of code g
  • Curl 不被识别为内部或外部命令、可运行程序或批处理文件

    我已经安装了curl并将其设置为environment variable在我的系统中 但是当运行curl命令它给出一个错误 curl is not recognized as an internal or external command
  • 如何使用 VbScript 创建选项对话框?

    我有一个第三方应用程序 它调用 vsbscript 文件来执行某些操作 我想提供一个带有选项选择的用户提示 可以是下拉列表或复选框或类似的选项 然而 我能找到的只是输入框选项 我不认为 HTA 适合我的情况 除非有办法从 vbs 文件调用它
  • 通过VBScript调用WCF服务

    有一个WCF服务 配置如下
  • 最后一个参数中的正斜杠会导致批处理文件目录(“%~dp0”)的路径发生更改

    我正在学习如何在批处理脚本中使用参数 并最终创建了某种用于读取参数和设置参数的模板 echo off SetLocal EnableDelayedExpansion set needextra set errstat set noflag
  • VBScript 错误 5 尝试使用“System.Security.Cryptography.SHA512Managed”计算 sha512

    我正在尝试用 VBScript 编写一段代码来计算 给定文件的 SHA512 值 根据 MSFT 文档 SHA512Managed 对象的 ComputeHash 方法需要 字节数组作为输入 所以我使用ADODB读取输入文件 要计算 SHA
  • 如何使用Windows批处理命令删除“无扩展名的文件”的所有内容

    我想删除以 FIlE 为扩展名的文件的内容 即没有扩展名 我知道如何删除文本文件的内容 但不知道如何删除以 文件 为扩展名的文件 我会感谢你的努力 提前致谢 Use Del 在批处理文件中删除没有扩展名的文件 use Dir A D 列出所
  • 访问另一个批处理文件中的批处理函数

    好吧 假设我们有一个名为 lib cmd 的文件 它包含 echo off GOTO EXIT FUNCTION echo something GOTO EOF EXIT exit b 然后我们有一个名为 init cmd 的文件 它包含
  • 使用脚本查找字符串长度的奇怪结果?

    我正在测试 unmeat 提交的这段代码这个问题 https stackoverflow com questions 21817684 batch get string length with special characters 肉叔叔引
  • .bat 文件将文件排序到文件夹中

    对于我的图片集 我希望文件夹中的所有图片按日期自动分类到文件夹中 幸运的是 这些文件已经以时间戳命名 2012 07 15 12 21 06 jpg 2012 07 15 12 21 26 jpg 2012 07 16 12 12 50 j
  • 更改desktop.ini不会在Windows中自动更新文件夹图标

    我使用此批处理脚本将所有文件夹和子文件夹的图标更改为位于文件夹中的 ico 文件 但是 资源管理器中的文件夹图标不会改变除非我手动重命名desktop ini将资源管理器中的文件更改为其他内容 然后返回desktop ini或者例如将字母更
  • 如何使用命令行压缩文件?

    我想使用批处理文件命令 Windows XP 批处理文件 压缩目录 例如 如果我想解压缩一个文件意味着我可以使用jar xf file zip java bat 文件命令 就像我想要一个命令行批处理来压缩目录一样 如果您使用的是 Ubunt
  • 如何从 .bat 运行 .vbs

    创建了一个广泛的批处理脚本程序来处理一些自动文件管理和打印 我需要调用一个 vbs 文件来执行它的 sendkeys 操作 有没有办法在不冻结程序的情况下完成此任务 我试过了START WAIT my vbs并且脚本在进入 vbs 时冻结
  • Grep 批量 ping

    寻找一种更好的方法来做到这一点 而不是我习惯的 手动 方法 因为这是一个我必须定期经历的过程 我有一系列要 ping 的 IP 从10 0 1 15 to 10 0 50 15 第三个八位位组指的是物理位置 最后一个八位位组指的是该位置处的
  • vbs以字典作为参数执行另一个vbs脚本

    我正在尝试从另一个 vbscript 执行一个 vbscript 我的想法是 我必须传递字典作为参数 但我总是收到相同的错误消息 到目前为止 这是我的代码 dim objShell Set objShell Wscript CreateOb
  • VB 脚本 Documents.Open 抛出 424 错误

    所以我有一个vbs脚本 Function test2open sSourceFile sPDFFile Dim wApp As Word Application Dim wDoc As Word Document logStream wri

随机推荐

  • Java Char 到其 unicode 十六进制字符串表示形式,反之亦然

    我需要将Java字符的十六进制代码生成为字符串 并稍后再次解析这些字符串 我发现here https stackoverflow com questions 2126378 java convert string uffff into ch
  • 如何在 Vue.js 插槽范围内传递方法

    我在 vuejs 中使用插槽范围 效果很好 我可以将任何我想要的东西传递到插槽中 如下所示
  • pandas中groupby后按条件计数

    df pd DataFrame id 1 1 1 2 2 2 item 200 200 201 333 333 334 page 1 1 2 3 2 2 我想像这样将 df 转换为 df1 df pd DataFrame id 1 1 2
  • Solaris 9 上的 grep 命令

    我在 Solaris 9 上遇到 grep 命令的奇怪行为 例如 我有一个包含两行的主机文件 1 1 1 1 主机 1 2 3 4 主机 MY 我想 grep 仅包含主机字符串的行 而不是包含主机 MY 的其他行 我用 grep Fxq 主
  • iOS 4 通常向后兼容吗?

    我有以下问题 在不久的将来我需要为iPhone编写一些不是很复杂的应用程序 我目前没有 iPhone 因此我计划购买一部用于测试目的 简而言之 iPhone 4 是否允许我测试为旧版 iOS 版本编写的应用程序 有什么陷阱吗 或者我是否必须
  • 按日期过滤 Pandas 数据框

    我有一个带有 日期 列的 Pandas DataFrame 现在我需要过滤掉 DataFrame 中日期在未来两个月之外的所有行 本质上 我只需要保留接下来两个月内的行 实现这一目标的最佳方法是什么 If 日期列是索引 然后使用 loc 进
  • 与您的操作系统或架构不兼容:[电子邮件受保护]

    我使用的是 Ubuntu 15 04 运行以下命令时 npm install fsevents 我收到以下错误 npm WARN optional Skipping failed optional dependency chokidar f
  • NT 事件日志单条消息大小

    谁能告诉我 Windows NT 日志消息的最大大小是多少 我知道可以将事件日志的最大日志大小从 32 MB 重置 我对 NT 事件日志中单个消息可以保存的内存感兴趣 提前致谢 在 Windows Server 2008 中 单个事件日志条
  • JavaFX 过渡动画等待

    这么快 我正在做一个演示计算机图形绘制方法的程序 我需要创建时间线或操作历史记录 例如 placeVertex x y moveVertex newX newY 等 并迭代 向前和向后 自动或手动 我已经通过使用命令设计模式实现了这一点 但
  • WordPress 动态自定义菜单未显示正确的结果

    我正在创建一个动态自定义菜单 显示特定类别的所有帖子链接 例如侧边栏中的菜单小部件 它应该是动态的 这意味着每当我在该类别中发布帖子时 菜单都应该包含我发布的帖子 而无需我在菜单中物理拖放新帖子 这是我的代码 我想要的帖子的类别 ID 4
  • 在Virtualenv环境中安装python-numpy

    我想在 Virtualenv 环境中安装 python numpy 我的系统是Ubuntu 12 04 我的python是2 7 5 首先我安装了 Virtualenv sudo apt get install python virtual
  • 如何只获取Python函数的返回值?

    我正在尝试通过 Python 学习编程 我想知道是否可以只获取函数的返回值而不获取其其他部分 这是代码 比方说 这是主要功能 variable a 5 while variable a gt 0 input user raw input i
  • 如何解决 pandas 读取大 csv 文件时的内存问题

    我有一个 100GB 的 csv 文件 其中有数百万行 我需要在 pandas 数据框中一次读取 10 000 行 并将其分块写入 SQL 服务器 我按照建议使用了 chunksize 以及 iteartorhttp pandas docs
  • 使用 SQL Server AdoJobStore 配置 Quartz.NET

    我在尝试让 Quartz NET 与 AdoJobStore 一起使用时遇到问题 这里的其他问题似乎都没有遇到我遇到的问题 我能够在没有 AdoJobStore 配置的情况下正常工作 但希望最终保留所有内容 但是在尝试时出现错误GetSch
  • Spring Batch ItemReader 列表仅处理一次

    我正在尝试使用创建 Spring Batch 作业ListItemReader
  • 替换 & 为 &

    我正在尝试使用 W3C 验证系统进行验证 但出现错误 第 59 行 第 47 列 字符 是分隔符的第一个字符 但作为数据出现 我知道原因是 您使用了未转义的与号 这在某些情况下可能有效 但建议使用 amp 这始终是安全的 在表格中 我是这样
  • jQuery Tokeninput:只读不起作用

    我正在使用在以下位置找到的插件http loopj com jquery tokeninput http loopj com jquery tokeninput 在创建具有 Web 应用程序管理员访问权限的用户列表的字段中 搜索 添加和删除
  • Stop-Service Cmdlet 无法打开存在的服务

    我正在尝试编写一个 PowerShell 脚本来停止本地计算机上的服务 当我运行 get service cmdlet 时 它按预期工作 当我使用 stop service cmdlet 时 出现错误 指出不存在具有我指定名称的服务 如果这
  • 如何将文件的内容与列最后一个数字的增量连接起来

    我有一个包含一些内容的文件 需要重复第 n 次并添加最后一列号的增量 Input content of a file TCTA 7 ccta TCTA 1 TCTA 8 ccta TCTA 1 TCTA 9 ccta TCTA 1 TCTA
  • 如何为命令 net user 在列表中返回的每个用户运行批处理文件?

    我的目标是制作一个通用代码 循环遍历计算机中的所有用户帐户名称并将输出发送到批处理文件 net user 命令输出用户列表 但我想将每个用户名分配给一个参数 所以我应该使用for f命令去做 这可能看起来很简单 但请记住用户名可能在任何位置