好吧,我需要一些批处理脚本专家来帮助我摆脱我自己支持的角落。
我有一个以系统身份运行的程序,我想更改net用户输出中显示的所有帐户的密码。我不确定如何使用命令行或基于AHK的脚本执行此操作。
当我执行net user命令时,输出对我来说是这样的:
C:\Users\Resident>net user
User accounts for \\9100BASELINE
-------------------------------------------------------------------------------
Administrator Guest Resident
The command completed successfully.
我需要一些方法将所有帐户的密码(无论是3还是50)更改为我选择的内容。
任何人都可以帮我解决这个问题吗?我尝试将一个for循环放在一起,其中每个项目都是一个标记,然后才意识到我不知道如何将用户名重新出现在那里。
答案 0 :(得分:2)
您实际上可以完全使用批处理。
最简单的方法是列出所有文件夹:
cd C:\Users
dir /b /o:n /ad > users.txt
之后,您将使用for循环为Users目录中的每个用户设置密码,并确保脚本不会尝试为Public文件夹设置密码,因为它不是用户
看起来像这样:
for /f %%i in ('type C:\Users\users.txt') do(
if not %%i==Public (
net user %%i [Insert Password Here]
)
)
从技术上讲,您实际上不必检查额外的非用户文件夹,因为如果cmd尝试为非用户文件夹设置密码,则实际上不会导致任何问题。
答案 1 :(得分:1)
我建议使用一些VBScript的帮助:
Set accounts = GetObject("WinNT://.")
accounts.Filter = Array("user")
For Each user In accounts
WScript.Echo user.Name
Next
将其保存为listusers.vbs
并按以下方式运行:
@echo off
setlocal
set /p "newpw=Enter new password: "
for /f "delims=" %%u in ('cscript //NoLogo C:\path\to\listusers.vbs') do (
net user "%%u" "%newpw%"
)
修改:如果要省略特定帐户的处理,可以在VBScript中添加排除列表:
Set exclude = CreateObject("Scripting.Dictionary")
exclude.CompareMode = vbTextCompare
exclude.Add "HomeGroupUser$", True
exclude.Add "otheruser", True
...
Set accounts = GetObject("WinNT://.")
accounts.Filter = Array("user")
For Each user In accounts
If Not exclude.Exists(user.Name) Then WScript.Echo user.Name
Next
或使用listusers.vbs
过滤findstr
的输出:
for /f "delims=" %%u in (
'cscript //NoLogo C:\path\to\listusers.vbs ^| findstr /v /i ^
/c:HomeGroupUser$ /c:otheruser ...'
) do (
net user "%%u" "%newpw%"
)