我正在尝试编写一个批处理文件以删除c:\users中的所有文件夹,但有一些例外。
场景: 我们在库中有多个共享 PC,用户可以登录这些 PC,并且永远不会再次使用。这通常会用用户配置文件填满 c:\ 驱动器。
我想从 c:\users 中删除除 c:\users\defaultuser0 和 c:\users\public 之外的所有文件夹。
希望这是有道理的? 我看到了其他一些问题/答案,但它们只指定如何指定 1 个文件夹。 另外,我知道delprof,因为我们确实在其他应用程序中使用它,但我想编写自己的文件,以便我可以在这种情况下对其进行修改。
如果您仍然想删除目录,违反我的建议,我建议您从批处理文件中使用以下WMIC
:
@For /F "Tokens=1*Delims==" %%A In ('WMIC Path Win32_UserProfile Where "Special!='True' And LocalPath Is Not Null And Not LocalPath Like '%%\defaultuser0'" Get LocalPath /Value 2^>Nul')Do @For /F "Tokens=*" %%C In ("%%B")Do @RD/S/Q "%%C"
如果您更喜欢Net User
方法,我仍然建议从批处理文件中WMIC
,如下所示:
@For /F Tokens^=2^Delims^=^" %%A In ('WMIC Path Win32_UserProfile Where^
"Special!='True' And LocalPath Is Not Null" Assoc^
/AssocClass:Win32_UserAccount 2^>Nul')Do @For /F "Tokens=1*Delims==" %%B In ('
WMIC UserAccount Where^
"SID='%%A' And LocalAccount='TRUE' And Name!='defaultuser0'" Get Name /Value^
2^>Nul')Do @For /F Tokens^=* %%D In ("%%C")Do @Net User "%%D" /Delete
使用 WMI 检索用户帐户路径和/或名称比仅按默认位置和用户原始名称选择目录要可靠得多
您似乎误解了什么是用户配置文件以及什么是用户。即使您从C:Usersusername
中删除他们的文件夹,仍然会保留一些信息,如 Compo 在此处所述,例如,在您安装在C:Program Files**
、C:Windows*
等中的某些程序中。如果您只是删除用户配置文件目录,则信息不会丢失。
但是,要实现您想要的,尽管不建议弄乱系统,请使用(以管理员权限运行):
@echo off
setlocal EnableDelayedExpansion
set exclude_list="defaultuser0" "public"
for /F "delims= eol=" %%A IN ('dir /B /AD "C:Users"') do (
if "!exclude_list:%%A=!" == "%exclude_list%" (rd /s /q "%%~fA")
)
echo Cleared the unneeded folders in C:Users^^! Folders remaining:
dir /b "C:Users"
删除用户的命令正式在 cmdnet user username /delete
中。为此,请执行以下操作:
@echo off
setlocal EnableDelayedExpansion
set exclude_list="defaultuser0" "public"
for /F "delims= eol=" %%A IN ('dir /B /AD "C:Users"') do (
if "!exclude_list:%%A=!" == "%exclude_list%" (net user %%~nxA /delete)
)
请注意,在这两种情况下,都添加要排除的带引号的文件夹名称。
有关所用命令的更多信息,请尝试查看 cmd 中以下命令的帮助页面:
echo /?
setlocal /?
启用,因为我们无法%exclude:%%A=%
。太多%
.set /?
for /?
if /?
rd /?
net user /?
一些有趣的链接参考供进一步阅读:
- https://ss64.com/nt/delayedexpansion.html
- https://ss64.com/nt/net-useradmin.html
- https://ss64.com/nt/netuseroptions.html
TL;博士:
wmic /namespace:\rootcimv2 path win32_userprofile where "SID LIKE 'S-1-5-21%' AND NOT LocalPath LIKE '%-Admin' AND NOT LocalPath LIKE '%\ToolBox'" delete
详:
在我的脑海中,我将问题从"删除所有文件夹"翻译为"删除所有用户配置文件"。 如果这是错误的,请随时击败我。 :-)
我最近有一个项目,我需要做同样的事情,我使用了上面的解决方案。 需要注意的是,Windows不会删除当前已激活且当前加载在内存中的配置文件 - 我认为这是一件好事。 在这些情况下,一旦系统重新启动,配置文件将不再加载,"DELETE"调用将正常工作。 这不仅会删除目录和文件,还会执行典型的配置文件清理工作。
请注意 - 我知道这是多余的,但由于这会删除配置文件,这意味着保存在配置文件中的文件也可以/将被删除。 您可能希望在删除之前备份文件。
查看和报告
wmic /namespace:\rootcimv2 path win32_userprofile where "SID LIKE 'S-1-5-21%' AND NOT LocalPath LIKE '%-Admin' AND NOT LocalPath LIKE '%\ToolBox'" get LocalPath,LastUseTime,SID
寻找和摧毁
wmic /namespace:\rootcimv2 path win32_userprofile where "SID LIKE 'S-1-5-21%' AND NOT LocalPath LIKE '%-Admin' AND NOT LocalPath LIKE '%\ToolBox'" delete
您可以备份要保留的文件夹,删除所有文件夹,最后将备份文件夹移回该位置,下面是一个示例:
@echo off
md c:folderbackup
copy c:usersdefaultuser0 c:folderbackupdefaultuser0
copy c:userspublic c:folderbackuppublic
del /f /q c:users*.*
move c:folderbackupdefaultuser0 c:usersdefaultuser0
move c:folderbackuppublic c:userspublic
rd c:folderbackup
如果显示Access Denied
,请尝试以管理员身份运行。