PDA

Показать полную графическую версию : [решено] Очистка мусора после установки Windows


Rostlv
23-10-2009, 11:33
После установки Windows в некоторых папках и в корне дисков остаются мусорные папки и файлы, например этим страдает Visual C++ 2008. Как указать удаление известных файлов в корне всех дисков сразу, а не перечислять каждый? И второе, есть папка такого вида: {2FC9EE99-128F-4CEC-BC98-1E3F31390064}, цифры при каждой новой установке меняются, можно ли её удалить с помощью подстановочных знаков?

amel27
26-10-2009, 11:18
Как указать удаление известных файлов в корне всех дисков сразу, а не перечислять каждый? »автоматизировать перечисление (по типу диска) - через DiskPart или WMI, пример для жестких (3) и сменных (2):
@Echo Off
SetLocal EnableExtensions EnableDelayedExpansion

For /F "Skip=1 UseBackQ Tokens=1,2" %%i In (
`WMIC LogicalDisk Where 'DriveType^=2 OR DriveType^=3' GET Name^,SystemName`
) Do If Not "%%j"=="" Set $L=!$L! %%i

For %%i In (%$L%) Do Echo Here Command for Disk %%i


есть папка такого вида: {2FC9EE99-128F-4CEC-BC98-1E3F31390064}, цифры при каждой новой установке меняются, можно ли её удалить с помощью подстановочных знаков? »можно через FindStr, но ввиду некоторых ограничений (поддерживаемые метасимволы, максимальная длина шаблона) условие придется смягчить - например, не задавать жестко количество HEX-символов между ограничителями:
@Echo Off

Set ROOT=.

Set $R={[0-9A-F][0-9A-F]*-[0-9A-F][0-9A-F][0-9A-F][0-9A-F]-[0-9A-F][0-9A-F][0-9A-F][0-9A-F]-[0-9A-F][0-9A-F]*-[0-9A-F][0-9A-F]*}
DIR /B/A:D %ROOT%\*|FindStr /XIRC:"%$R%"

Rostlv
26-10-2009, 18:31
Спасибо amel27, но что-то удаление папки не работает, c дисками пока не разбирался. И ещё, в имени папки меняются не только цифры, но и буквы, забыл упомянуть выше. А сама папка создаётся в пользователе, Default User и в systemprofile, то есть в трёх местах сразу. А попроще вариантов нет? Свой батник запускаю через RunOnce, при втором входе в систему, после установки .Net 3.5 аддона.

amel27
27-10-2009, 00:52
удаление папки не работает »а тут и нет команды удаления (только фильтр), т.к. не был указан путь, по которому эту папку искать... "в пользователе, Default User и в systemprofile" тоже как-то туманно... в "Documents and Settings\Default User\" что-ли?.. ставьте вопросы конкретней плз.

Rostlv
27-10-2009, 10:00
Путь я указал, но видимо что-то с фильтром.
@Echo Off

RD /S /Q %SystemRoot%\system32\config\systemprofile\{[0-9A-F][0-9A-F]*-[0-9A-F][0-9A-F][0-9A-F][0-9A-F]-[0-9A-F][0-9A-F][0-9A-F][0-9A-F]-[0-9A-F][0-9A-F]*-[0-9A-F][0-9A-F]*}
RD /S /Q %SystemDrive%\Documents and Settings\Default User\{[0-9A-F][0-9A-F]*-[0-9A-F][0-9A-F][0-9A-F][0-9A-F]-[0-9A-F][0-9A-F][0-9A-F][0-9A-F]-[0-9A-F][0-9A-F]*-[0-9A-F][0-9A-F]*}
RD /S /Q %SystemDrive%\Documents and Settings\Имя пользователя\{[0-9A-F][0-9A-F]*-[0-9A-F][0-9A-F][0-9A-F][0-9A-F]-[0-9A-F][0-9A-F][0-9A-F][0-9A-F]-[0-9A-F][0-9A-F]*-[0-9A-F][0-9A-F]*}

amel27
27-10-2009, 10:20
приведенная строка маска для FindStr, а не имя папки
@Echo Off

Set $R={[0-9A-F][0-9A-F]*-[0-9A-F][0-9A-F][0-9A-F][0-9A-F]-[0-9A-F][0-9A-F][0-9A-F][0-9A-F]-[0-9A-F][0-9A-F]*-[0-9A-F][0-9A-F]*}

Call :RD_MASK "%$R%" "%SystemRoot%\system32\config\SystemProfile"
Call :RD_MASK "%$R%" "%SystemDrive%\Documents and Settings\Default User"
Call :RD_MASK "%$R%" "%SystemDrive%\Documents and Settings\%UserName%"

EXIT

:RD_MASK
For /F "Delims=" %%i In (
'DIR /B/A:D "%~2\*"^|FindStr /XIRC:"%~1"'
) Do RD /S/Q "%~2\%%i"
GoTo :EOF

Rostlv
27-10-2009, 10:31
amel27, огромное спасибо, теперь всё работает.




© OSzone.net 2001-2012