नेटवर्क शेयरों पर $ RECYCLE.BIN फ़ोल्डर ढूँढना


1

क्या नेटवर्क शेयर और उनके आकार पर $ RECYCLE.BIN फ़ोल्डर खोजने के लिए एक अच्छा उपकरण है?

हमारे वातावरण में हम उपयोगकर्ता प्रोफाइल / डेटा संग्रहीत करने के लिए रोमिंग प्रोफाइल और फ़ोल्डर पुनर्निर्देशन का उपयोग करते हैं। उपयोगकर्ता अपने रीसायकल बिन को साफ करने में अक्सर आलसी होते हैं और इसलिए हमारे नेटवर्क के शेयर भरते हैं।

मैंने इसे पहले ही एक PowerShell स्क्रिप्ट के साथ आज़माया था, लेकिन यह अक्सर विफल रहता है या टाइमआउट करता है।

किसी भी सलाह के लिए धन्यवाद।

श्रेष्ठ।


क्या आपने विंडस्टैट के साथ प्रयास किया?
पोलोक्स 12

हां, लेकिन मैं केवल $ RECYCLE.BIN आंकड़ों के परिणाम के रूप में चाहता हूं जो नेटवर्क साझा पर संग्रहीत संपूर्ण फ़ाइलों का नहीं है।
mazebuhu

जवाबों:


1

वास्तव में गंदा कमांड प्रॉम्प्ट वन-लाइनर हो सकता है:

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


1

आपके उत्तर के लिए धन्यवाद। मुझे एक छोटा और मेरी राय में "$ RECYCLE.BIN" खोजने के लिए एक और अधिक सुरुचिपूर्ण तरीका मिला, जो Windows PowerShell का उपयोग करके नेटवर्क साझा या स्थानीय निर्देशिका पर पुनरावर्ती है:

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

या आप मूल निर्देशिका में cd करते हैं जहाँ आप अपनी खोज शुरू करना चाहते हैं:

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)}} 

(ध्यान रखें कि यदि आप "सिलेक्ट-ऑब्जेक्ट" का उपयोग करते हैं तो आप मूल रिटर्न ऑब्जेक्ट को केवल निर्दिष्ट सदस्यों को काटते हैं।)

श्रेष्ठ!


आपने अपने टाइमआउट को कैसे हल किया?
jimbobmcgee
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.