要删除 C:\users\*name* 的批处理文件,指定文件夹除外



我正在尝试编写一个批处理文件以删除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,请尝试以管理员身份运行。

最新更新