【问题标题】:Batch file - Save multi-line output of FOR command into separate variables [closed]批处理文件 - 将 FOR 命令的多行输出保存到单独的变量中 [关闭]
【发布时间】:2021-12-30 09:48:30
【问题描述】:

我在 Virtual Box 虚拟机上运行 Windows 10。我的主机是运行 Windows 11 的 ASUS F515J。

我正在编写一个批处理文件,我希望将net user 命令的每一行输出保存到一个单独的变量中。基本上,在以下屏幕截图中,我希望将红色矩形周围的每一行保存为单独的变量,例如%userline1%%userline2% 等: The screenshot

(我知道在批处理文件中,我需要写%% 而不是%

for 命令真的让我很困惑,我以前从未使用过它,所以当你编写命令时,请尽可能清楚地说明我需要用我自己的变量替换你的代码的哪一部分, net user

提前致谢!

【问题讨论】:

  • 能否请您edit 提出您的问题并尝试解释实际的最终目的是什么?我不确定将输出的每一行保存到单独的变量中是否有什么目的,因为我设想您需要执行进一步的解析和排除这些以隔离域名和每个单独的帐户名称. (您实际上并不需要一个变量,例如 %userline2%/%userlist2% 来包含一系列 - 字符!)
  • 目的是有一个批处理文件来停用除当前处于活动状态的用户帐户之外的所有用户帐户。将每一行保存为变量后,我会执行以下操作来提取用户名:` set account1=%userline3:~0,25% set account2=%userline3:~25,25% ` etc. 额外的空格在用户名后面直到达到 25 个字符都不是问题,当我执行以下操作以停用所有其他帐户时 net 命令仍然可以正常工作:`net user %account1% /active:no net user %account2% /active:no`等等然后我会这样做:net user %username% /active:yes
  • IMO 那么你就大错特错了,尤其是当列出的一些帐户可能已经被禁用/停用时。 net.exe 实用程序肯定不是我将用于该任务的东西。

标签: batch-file cmd command-prompt


【解决方案1】:

鉴于您对脚本的真正用途的评论,我可能会使用 WMIC.exe 作为单行程序来执行此操作。

这应该直接从提升的 工作,即“以管理员身份运行”:

%SystemRoot%\System32\wbem\WMIC.exe UserAccount Where "Disabled='FALSE' And Name!='%UserName%'" Set Disabled=TRUE

请注意,您的更改在下次重新启动之前不太可能生效。

还请注意,如果您正在运行多个主机,即不同的域名,您可能希望排除多个特定用户 Name 并可能排除一个或多个 Domain。 (上面的示例仅从任何报告的域中排除当前用户的帐户名)。

【讨论】:

    【解决方案2】:

    此命令将每一行存储到单独的变量中

    setlocal ENABLEDELAYEDEXPANSION
    
    set "counter=0"
    for /f "tokens=*" %%G in ('net user') do (
        set "var[!counter!]=%%G"
        set /a counter+=1
    )
    

    【讨论】:

    • 谢谢!我需要将第一行保存到 %userlist1%,将第二行保存到 %userlist2% 等,而不是在变量名称中添加随机数。我该怎么做?
    • 这个答案几乎很好,但它最终没用,因为你没有使用延迟扩展,所以同一个变量被反复使用并最终包含字符串 The command completed successfully. 你应该初始化一个计数器变量和而是在循环内增加它。
    • @Somethingdark 你是对的,只需编辑我的答案
    猜你喜欢
    • 2017-02-01
    • 2015-09-11
    • 1970-01-01
    • 1970-01-01
    • 2013-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多