Поиск альтернативных файловых потоков, которые занимают слишком много места на диске
Как известно, большинство программ оценки свободного места (вроде WinDirStat) не показывают объем, занимаемый альтернативными файловыми потоками.
Этот скрипт призван заполнить такой недостаток.
По-умолчанию сканируется только системный диск.
В отчёт попадут файли и папки, чьи ADS занимают более 1000 байт. Можете изменить этот лимит в переменной MAX_STREAM_SIZE.
Совместимость: Windows Vista и выше.
Код (DOS):
@echo off
SetLocal EnableExtensions
set "MAX_STREAM_SIZE=1000"
cd /d "%~dp0"
2>nul del ADS.log
echo _______________________________
echo ADS scaner by Alex Dragokas
title ADS scaner by Alex Dragokas
echo _______________________________
echo .
echo Scanning disk %SystemDrive% ...
echo Please, wait.
echo .
net session >NUL 2>NUL || (
echo Запустите утилиту от имени Администратора !!!
echo You need to launch this app. as Admin !!!
pause>nul & goto :eof
)
:: for pseudo progress-bar purposes
set Drive=%SystemDrive%
call :ScanFolder %Drive%
:: 1 level
for /f "delims=" %%a in ('dir /b /ad-l "%Drive%\*"') do (
call :ScanFolder "%Drive%\%%a"
rem 2 level
for /f "delims=" %%b in ('dir /b /ad-l "%Drive%\%%a\*"') do (
rem Start recursive scanning on 2 level
call :ScanFolder "%Drive%\%%a\%%b" /s
)
)
del t.log t2.log
explorer ADS.log
pause
goto :eof
:ScanFolder [Path] [/s for recursive]
echo "%~1"
dir /r /a-l /-c %~2 "%~1\*" > t.log
echo Parsing ...
< t.log > t2.log findstr /r /c:":.*:" /c:"Содержимое папки" /c:"Directory of"
for /f "tokens=1-2*" %%a in (t2.log) do (
if "%%a %%b"=="Содержимое папки" (
set "Folder=%%c"
) else (
if "%%a %%b"=="Directory of" (
set "Folder=%%c"
) else (
if %%a GTR %MAX_STREAM_SIZE% call :Log "%%a" "%%b %%c"
))
)
exit /b
:Log
echo %~1 "%Folder%\%~2" >> ADS.log
exit /b
Батник обязательно сохранять в кодировке OEM-866.