在网络共享上查找 $RECYCLE.BIN 文件夹

在网络共享上查找 $RECYCLE.BIN 文件夹

是否有一个好的工具可以查找网络共享上的 $RECYCLE.BIN 文件夹及其大小?

在我们的环境中,我们使用漫游配置文件和文件夹重定向来存储用户配置文件/数据。用户通常懒得清理回收站,因此我们的网络共享空间被填满。

我已经尝试使用 PowerShell 脚本但它经常失败或超时。

谢谢您的任何建议。

最好的。

答案1

谢谢大家的回答。我发现了一种更短且我认为更优雅的方法,使用 Windows PowerShell 在网络共享或本地目录中递归查找“$RECYCLE.BIN”:

Get-ChildItem \\server\share -Directory -Hidden -Filter '$REC*' -Recurse | ft Name,FullName

或者您只需进入您想要开始搜索的根目录:

cd C:\Directory
Get-ChildItem -Directory -Hidden -Filter '$REC*' -Recurse | ft Name,FullName

如果您还想显示 $RECYCLE.BIN 文件夹的大小,您可以使用这个稍微复杂一点的命令:

Get-ChildItem \\server\share\some\path -Directory -Hidden -Filter '$REC*' -Recurse | Select-Object Name,FullName,@{l="Size in MB";e={"{0:N2}" -f ((Get-ChildItem $_.FullName -Force | Measure-Object -Property length -sum).sum / 1MB)}} 

或更短:

gci \\server\share\some\path -Directory -Hidden -Filter '$REC*' -Recurse | select Name,FullName,@{l="Size in MB";e={"{0:N2}" -f ((gci $_.FullName -Force | measure -Property length -sum).sum / 1MB)}} 

(请记住,如果使用“Select-Object”,则会截断原始返回对象,仅保留指定的成员。)

最好的!

答案2

一个非常肮脏的命令提示符单行可能是:

FOR /d /r "D:\" %A IN ($RECYCLE.BIN) DO @IF EXIST "%~A" ECHO %~A & ROBOCOPY /l /s /nfl /fp /np /ndl /nfl /njh /r:0 "%~A" "%~A"

(替代"D:\"搜索的根路径)。

摘要ROBOCOPY将在其“跳过”栏中为您提供合理的大小指标。

编辑

另一个非常肮脏的单行代码,这次扫描一系列服务器上所有可能的驱动器号:

FOR %S IN (SERVER1 SERVER2 SERVER3) DO @FOR %D IN (A$ B$ C$ D$ E$ F$ G$ H$ I$ J$ K$ L$ M$ N$ O$ P$ Q$ R$ S$ T$ U$ V$ W$ X$ Y$ Z$) DO @IF EXIST "\\%~S\%~D\$RECYCLE.BIN" ECHO. & ECHO. & ECHO \\%~S\%~D\$RECYCLE.BIN & ROBOCOPY /l /s /nfl /fp /np /ndl /nfl /njh /r:0 "\\%~S\%~D\$RECYCLE.BIN" "\\%~S\%~D\$RECYCLE.BIN"

当然,如果到了这样的单行代码变得无法维护的地步,那么在批处理文件中scanbins.cmd

@ECHO OFF

VERIFY OTHER 2>nul
SETLOCAL ENABLEEXTENSIONS
IF ERRORLEVEL 1 ECHO Unable to enable extensions & GOTO :loop_end

SET ROBO="%WINDIR%\system32\robocopy.exe" /l /s /nfl /fp /np /ndl /nfl /njh /r:0
SET FIND="%WINDIR%\system32\find.exe" /i
SET DISKS=A$ B$ C$ D$ E$ F$ G$ H$ I$ J$ K$ L$ M$ N$ O$ P$ Q$ R$ S$ T$ U$ V$ W$ X$ Y$ Z$

:loop_start
IF "{%1}"=="{}" GOTO :loop_end

FOR %%D IN (%DISKS%) DO (
  SET BIN_PATH=\\%~1\%%~D\$RECYCLE.BIN

  IF EXIST "!BIN_PATH!\.\*" (
    FOR /f "useback tokens=*" %%F IN (`dir /a:d /b "!BIN_PATH!"`) DO (
      SET USER_BIN_PATH=!BIN_PATH!\%%~nxF
      IF EXIST "!USER_BIN_PATH!\.\*" (
        ECHO.
        ECHO !USER_BIN_PATH!
        %ROBO% !USER_BIN_PATH! !USER_BIN_PATH! | %FIND% " : " | %FIND% /v "Ended" | %FIND% /v "Times"
      )
    )
  )
)

SHIFT
GOTO :loop_start

:loop_end
ENDLOCAL
GOTO :EOF

...您可以将其称为scanbins.cmd SERVER1 SERVER2 SERVER3

相关内容