批处理文件删除超过N天的文件夹,但特定文件夹除外

时间:2013-10-06 17:09:25

标签: batch-file

我正在制作一个批处理文件来删除超过6个月未使用的配置文件,同时保留“管理员,默认用户,所有用户等”等特定的配置文件。

我四处搜索并找到了删除旧文件/文件夹的方法:

forfiles.exe / p D:\ Files / s / m / d -7 / c“cmd / c del @file”

但是没有办法用“forfiles”

制作例外

我还找到了删除文件/文件夹的方法,但有例外:

for %% i in(* .exe)如果不是“%% i”==“文件名”del / q“%% i”

但是,这将删除所有文件/文件夹,而不仅仅是旧文件/文件夹。

我的情景: 我负责运行WinXP的数百个工作站。有几个用户登录到这些计算机,我不想删除他们的帐户。只有那些一段时间没有登录的人,以及每个工作站中总是相同的3或4个永久帐户除外。因此,如果超过6个月内没有人登录管理员帐户,我希望它保持不变。我不能将文件放入所有这些工作站或任何其他软件中,所以我的能力有限。

有人可以帮忙吗?

3 个答案:

答案 0 :(得分:2)

首先,制作一个包含例外文件夹的文本文件,将每行一个文件夹放在双引号中 将例外文件放在%userprofile%文件夹中 示例exception.txt

"Default"
"Default User"
"All Users"

Batch代码:

for /f "delims=" %%a in ('forfiles /p "%userprofile%\.." /d -180 /c "cmd /c if @isdir==TRUE echo @file"^|findstr /vig:"%userprofile%\exception.txt"') do echo rd /s /q "%%~a"

查看输出并删除echo命令,如果它看起来不错 Forfiles可在XP教授或更好,不是XP Home

答案 1 :(得分:0)

我将这个脚本放在我在网上发现的几个脚本中,这些脚本在一次拍摄中完全符合我的需要:

  

get-childitem “c:\ documents and settings \” -exclude “Admin *”,   “所有用户”,“默认用户” |? {$ .psiscontainer - 和   $ .lastwritetime -le(获取日期).adddays( - 90 )} |%{remove-item $ _   -recurse}

唯一需要改变的是粗体:

  • files \ folders
  • 的位置
  • 要从删除中排除的文件夹的名称
  • 天数

我对powershell一无所知,但我把这一切放在一起的研究让我觉得值得学习。谢谢你的时间,我希望这有助于那里的人!

答案 2 :(得分:0)

这是一个可以执行您想要的vbs文件。

NumberOfDays = 180 'anything older than this many days will be removed
TempFolderPath = "C:\Users\" 'location of main folder, (deletes folders inside here)
XPTempFolderPath = "C:\Documents and Settings\"

On Error Resume Next
Dim fso, objFolder, objFolderB

Set fso = CreateObject("Scripting.FileSystemObject")
Set objFolder = fso.GetFolder(TempFolderPath)
Set objFolderB = fso.GetFolder(XPTempFolderPath)

'Win 7
'DateCreated or DateLastModified can be used
FOR EACH fldr in objFolder.SubFolders
    IF DateDiff("d", fldr.DateLastModified,Now) > NumberOfDays AND NOT isexception(fldr.name)  Then
        fso.DeleteFolder fldr.path, TRUE
    END IF
NEXT

'XP
'DateCreated or DateLastModified can be used
FOR EACH fldr in objFolderB.SubFolders
    IF DateDiff("d", fldr.DateLastModified,Now) > NumberOfDays AND NOT isexception(fldr.name)  Then
        fso.DeleteFolder fldr.path, TRUE
    END IF
NEXT

'Put name of folder to NOT delete in "true" section
'The Else blank false, deletes everything else
FUNCTION isException(BYVAL foldername)
    SELECT CASE foldername
        CASE "Administrator"
            isException = TRUE
        CASE "All Users"
            isException = TRUE
        CASE "Default User"
            isException = TRUE
        CASE "Default"
            isException = TRUE
        CASE "HPADMIN"
            isException = TRUE
        CASE "ittech"
            isException = TRUE
        CASE "Public"
            isException = TRUE
        CASE "Guest"
            isException = TRUE
        CASE "LocalService"
            isException = TRUE
        CASE "NetworkService"
            isException = TRUE
        CASE ELSE
            isException = FALSE
    END SELECT
END FUNCTION


Set fso = nothing
Set objFolder = nothing
Set objFile = nothing
Set objSubfolder = nothing