批处理文件删除C:\ users \ * name *(指定文件夹除外)

时间:2019-02-22 15:35:35

标签: batch-file

我正在尝试编写批处理文件以删除c:\ users中的所有文件夹,但有一些例外。

场景: 我们在一个库中有多台共享PC,用户可以登录而不再使用。这通常会用用户个人资料填充c:\驱动器。

我想从c:\ users中删除所有文件夹,除了c:\ users \ defaultuser0和c:\ users \ public。

希望这有意义吗? 我看到了其他一些问题/答案,但它们仅指定如何指定1个文件夹。 另外,我知道delprof,因为我们确实在其他应用程序中使用过它,但是我想编写自己的文件,以便在这种情况下可以对其进行修改。

4 个答案:

答案 0 :(得分:2)

如果仍然要删除目录,反对我的建议,我建议从批处理文件中像这样使用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检索用户帐户路径和/或名称要比仅通过默认位置和用户原始名称选择目录更为强大

答案 1 :(得分:0)

您似乎误解了什么是用户个人资料以及什么是用户。即使您从C:\Users\username中删除了他们的文件夹,Compo here仍然会保留一些信息,例如在您已安装在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\"

删除用户的命令正式在cmd net 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 /?

一些有趣的链接参考,以供进一步阅读:

答案 2 :(得分:0)

TL; DR:

wmic /namespace:\\root\cimv2 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:\\root\cimv2 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:\\root\cimv2 path win32_userprofile where "SID LIKE 'S-1-5-21%' AND NOT LocalPath LIKE '%-Admin' AND NOT LocalPath LIKE '%\\ToolBox'" delete

答案 3 :(得分:-1)

您可以备份要保留的文件夹,删除所有文件夹,然后最后将备份文件夹移回该位置,这是一个示例:

@echo off
md c:\folderbackup
copy c:\users\defaultuser0 c:\folderbackup\defaultuser0
copy c:\users\public c:\folderbackup\public
del /f /q c:\users\*.*
move c:\folderbackup\defaultuser0 c:\users\defaultuser0
move c:\folderbackup\public c:\users\public
rd c:\folderbackup

如果显示Access Denied,请尝试以管理员身份运行。