【问题标题】:Batch file that deletes folders of users in C:\users that are more than 210 days删除 C:\users 中超过 210 天的用户文件夹的批处理文件
【发布时间】:2015-10-19 02:23:48
【问题描述】:

我正在尝试编写一个批处理文件,以删除/删除 C:\users 中超过 210 天的不同用户文件夹。

我试过这个 forfiles /p C:\users /d -210 /c "cmd /c del @file"

但是此命令会删除当前用户的快捷方式以及这些快捷方式超过 210 天。

如果内容的最后修改日期早于 210 天,我能否让批处理文件仅删除整个文件夹

我也可以指定要删除的文件夹的起始名称(用户以PDC开头),因为我担心它可能会删除一些计算机的重要隐藏文件,因为这个批处理文件将在管理员下运行帐户。

感谢任何帮助

【问题讨论】:

  • 这必须是批处理文件而不是 powershell 或 vbscript 的任何原因?此外,简单地删除用户配置文件文件夹不会删除注册表中较新版本的 Windows 中的任何用户配置文件设置(我相信 8+...但对于 Windows 7 也可能如此...)
  • 您好,感谢您的回复。删除用户文件夹的目的是为了节省空间,因为计算机是共享的,并且由于某些限制,经常使用替换磁盘也不是一种选择。
  • 首选批处理文件是环境原因。
  • 更换磁盘不是一种选择,但如果删除文件夹而不删除注册表中的引用,则可能会导致注册表损坏。批处理文件可以调用VBScript/Powershell 脚本来正确删除配置文件,从而降低磁盘更换/重新映像的机会吗?如果没有,wmic /node:"localhost" path win32_UserProfile where LocalPath="c:\\users\\PDC*" Delete 2>>c:\temp\wmic.err Delete 可能会做你想做的事。

标签: batch-file


【解决方案1】:

首先在仅列表模式下运行 robocopy,如果没有比指定年龄更新的文件,则继续执行实际删除操作:

@echo off
set AGE=2
set EXCLUDE="Public" "admin1" "admin2"
for /d %%D in (C:\users\*) do (
    echo %EXCLUDE% | find /i """%%~nD""" >nul
    if errorlevel 1 (
        set too_new=0
        robocopy "%%D" "%%D" /L /v /s /xjd /minage:%AGE% | findstr /r /c:"^. *too new" >nul
        if errorlevel 1 (
            echo Deleting %AGE% days old %%D
            rd /s /q "%%D"
        )
    )
)
pause

不要忘记先注释掉rd 行来进行测试运行:在rem 前面加上一个空格。

注意事项:

  • /L = 仅列表模式,不执行复制
  • /V = 详细模式,报告文件因各种原因被跳过,例如我们寻找的“太新”
  • /S = 查看子目录
  • /xjd = 不要跟随目录的连接点,如果这些连接点指向不可用的设备,则很有用
  • findstr 中的^. *too new 正则表达式列出了以制表符开头的行,后跟大量空格,然后是too new

【讨论】:

  • 您好,感谢您的建议,它就像我在其他文件夹上测试时所需要的一样。我相信这也会删除公用文件夹,有什么办法可以防止这种情况发生吗?再次感谢
  • 如果我想排除另一个具有特定名称 admin1、admin2 等的文件夹,我应该设置不同的命名吗?比添加 && "%%D" =="%set name%"?
猜你喜欢
  • 1970-01-01
  • 2017-05-26
  • 2010-09-08
  • 2019-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多