【问题标题】:Batch File to Remove Files from C:\Users folder从 C:\Users 文件夹中删除文件的批处理文件
【发布时间】:2022-01-06 15:07:15
【问题描述】:

我在设备将本地用户配置文件存储在 C:\Users 文件夹中的域环境中工作。

我想为用户开发一个批处理文件,以便能够运行以删除 90 天内未修改的文件(用户配置文件)。对于任何以 .OA 或 .SA 结尾的文件,我确实需要豁免

我有这个,但它开始在 C:\Users\All Users 中查找,但是,这不是可删除的目录之一。

ForFiles /p "C:\Users" /s /d -90 /c "cmd /c del @file"

任何帮助将不胜感激。

【问题讨论】:

  • N. B.: forfiles 迭代文件和目录,所以你需要排除后者:forfiles /S /P "%PUBLIC%\.." /D -90 /C "cmd /D /C if @isdir==FALSE del @path"...
  • 因此,如果用户在 90 天内未在其 Web 浏览器中添加或删除任何收藏夹,它们将全部被删除。这真的是你想要的吗?

标签: batch-file cmd


【解决方案1】:

我决定发布这一行 作为隔离您希望的活动用户帐户的潜在解决方案。但是我要补充一点,虽然我使用了您想要的 ForFiles 命令的改进版本,但我不建议您在真实环境中使用它。我之所以这么说是因为,根据用户帐户的年龄,这些目录树中很可能会有很多文件,这是需要的。一个文件在一定的时间跨度内没有被修改,并不意味着它可以被删除。出于这个原因,我在命令行末尾使用了Echo @Path,而不是您提交的Del @File。如果您愿意删除从我上面的代码返回的所有内容,请随时进行删除替换。

@For /F Tokens^=2^ Delims^=^" %%G In ('%SystemRoot%\System32\wbem\WMIC.exe UserAccount Where "AccountType = 512 And LocalAccount = 'TRUE' And SIDType = 1 And Status = 'OK'" Assoc:List /ResultClass:"Win32_SID" 2^>NUL ^| %SystemRoot%\System32\findstr.exe "__R"') Do @For /F Tokens^=6^ Delims^=^" %%H In ('%SystemRoot%\System32\wbem\WMIC.exe Path Win32_UserProfile Where "LocalPath Like '%SystemDrive%\\Users\\%%' And SID = '%%G' And Special = 'FALSE'" Get LocalPath /Format:"MOF" 2^>NUL') Do @%SystemRoot%\System32\forfiles.exe /P "%%H" /S /D -90 /C "%SystemRoot%\System32\cmd.exe /D /C \"If @IsDir == FALSE If /I Not @Ext == \"OA\" If /I Not @Ext == \"SA\" Echo @Path\""

【讨论】: