0

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

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

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

但是没有办法对“forfiles”进行例外处理

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

for %%i in (*.exe) do if not "%%i"=="file name" del /q "%%i"

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

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

任何人都可以帮忙吗?

4

3 回答 3

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 Prof. 或更好的版本中可用,而不是 XP Home

于 2013-10-06T19:29:10.917 回答
0

我从网上找到的几个脚本中整理了这个脚本,这些脚本几乎可以一次性完成我需要的所有操作:

get-childitem "c:\documents and settings\" -exclude "Admin*", "All Users", "Default Users" |? {$ .psiscontainer -and $ .lastwritetime -le (get-date).adddays(- 90 )} |% {remove-item $_ -recurse}

唯一需要更改的是粗体:

  • 文件\文件夹的位置
  • 希望从删除中排除的文件夹的名称
  • 天数

我对powershell一无所知,但我所做的研究只是为了把这一切放在一起,让我觉得它值得学习。感谢您抽出宝贵的时间,我希望这对那里的人有所帮助!

于 2013-10-09T03:01:03.620 回答
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
于 2013-11-27T16:52:47.643 回答