Войти

Показать полную графическую версию : Очистка содержимого дисков не затрагивая папки ОС


Rudeboy
13-06-2013, 13:06
Нужен батник по очистке всех папок и файлов кроме системных, на всех дисках. Поиском пользовался.
Были решения со списком исключений, но почему-то не работают. Может есть у кого готовый батник?

Iska
13-06-2013, 13:23
Что Вы понимаете под «системными папками и файлами»?

Rudeboy
13-06-2013, 13:39
Что Вы понимаете под «системными папками и файлами»? »
Windows Users Program Files и (x86)

Iska
13-06-2013, 15:53
То есть:
$Recycle.Bin
"Documents and Settings"
ProgramData
Recovery
"System Volume Information"
и файлы в корневом разделе удаляем (ну, ладно — пытаемся удалить ;))? А после идём в раздел Microsoft Windows 7 (http://forum.oszone.net/forum-95.html) и жалуемся?

Цель Ваша глобальная какова?

Rudeboy
14-06-2013, 02:48
Цель Ваша глобальная какова? »
Цель - при открытии двери офиса ненужными людьми быстро подчистить диски. оставить систему с программной составляющей.

Iska
14-06-2013, 04:34
Rudeboy, если под «ненужными людьми» подразумеваются люди из управления «К» (http://ru.wikipedia.org/wiki/%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%C2%AB%D0%9A%C2%BB) — то сие не поможет. Разве что Программа SDelete (версия 1.6.1) (http://technet.microsoft.com/ru-ru/sysinternals/bb897443.aspx) и ей подобные. Но для их работы нужно время.

Foreigner
14-06-2013, 07:09
Цель - при открытии двери офиса ненужными людьми быстро подчистить диски »

Для этого вся работа должна храниться на сетевом диске, а специально обученные помощники админа изымать винчестеры по секундомеру.

Xarien
14-06-2013, 17:05
Я с похожим вопросом обращался. У меня кстати исключения работают, но толкьо если папки в корне диска.

Добрые люди с форума подсказали, как можно поиному сделать список исключений.
И батник вроде работает.

@echo on

Set Otkuda=c:\


Set NoDelete=C:\clean\exclude.txt
@Echo %0 >%NoDelete%

@Echo \555\ >>%NoDelete%


FOR /F "usebackq delims=" %%f IN (`xcopy /y /h /i "%Otkuda%\*.aaa" Y:\Clean\%USERNAME% /L /S /EXCLUDE:%NoDelete%`) DO Del "%%f"
pause


В Eclude.txt написано

\555\

Тоесть, из сканирования исключена папка 555 и всё вложенные папки. опять таки это я для примера.


Есть только несколько проблем.
1. Файлы почему-то не копируются. (только удаляются, а надо что бы копировались с сохранением структуры папок)
2. Не знаю как сделать такой поиск по всем локальным дискам (исключая флэшки если они вставлены)
3. Как перечислить побольше масок файлов? *.aaa стоит для примера. А надо *.aaa, *.bbb, *.ссс и т.дт

Foreigner
14-06-2013, 18:04
Xarien:
а надо что бы копировались с сохранением структуры папок
у xcopy ключи /e или /s в зависимости от задачи

Не знаю как сделать такой поиск по всем локальным дискам (исключая флэшки если они вставлены)

@echo off
setlocal

set "wmic=wmic logicaldisk where drivetype!="2" get name"

for /f %%i in (' "%wmic%" ') do if exist %%i echo do something with drive %%i


Как перечислить побольше масок файлов? *.aaa стоит для примера. А надо *.aaa, *.bbb, *.ссс и т.дт
Можно завернуть в еще один цикл:

for %%i in (.aaa .bbb .ccc) do (

for /f ... %%j in ('xcopy .... *%%i ....) do del "%%j"

)

Xarien
18-06-2013, 12:31
Всё равно не копирует. Удалять удаляет, с исключениями, как надо, но не копируует перед этим. В итоге папка Y:\Clean\%USERNAME% пуста.
http://img.i.tyt.by/avatars/152970/600x600137154580939.jpeg


@echo on

MD Y:\Clean\%USERNAME%
If Not Exist "Y:\Clean" (
Echo Otsutstvet Setevoi Disk: Y:\Clean
Exit
)

setlocal

set wmic=wmic logicaldisk where drivetype="3" get name

Set NoDelete=C:\clean\exclude.txt
@Echo %0 >%NoDelete%

@Echo \OFFICE\ >>%NoDelete%
@Echo \Windows\ >>%NoDelete%
@Echo \Program Files\ >>%NoDelete%
@Echo \Program Files (x86)\ >>%NoDelete%

for /f %%i in (' "%wmic%" ') do if exist %%i (

for %%j in (.aaa .bbb .ccc) do (
FOR /F "usebackq delims=" %%f IN (`xcopy /s /y /h /i "%%i\*%%j" "Y:\Clean\%USERNAME%" /L /EXCLUDE:%NoDelete%`) DO Del "%%f"
)
)



Пытался вставить отдельно строку c xcopy (Но не понятно почему не работает вышеуказанный код:(...)

for /f %%i in (' "%wmic%" ') do if exist %%i (

for %%j in (.aaa .bbb .ccc) do FOR /F "usebackq delims=" %%f IN (`xcopy /s /y /h /i "%%i\*%%j" "Y:\Clean\%USERNAME%\%%i"`) do (

FOR /F "usebackq delims=" %%f IN (`xcopy /s /y /h /i "%%i\*%%j" "Y:\Clean\%USERNAME%" /L /EXCLUDE:%NoDelete%`) DO Del "%%f"
)
)
pause


Но это ооочень уж длительный процесс.


Такая процедура значительно быстрее отрабатывала поиск и копирование файлов. (но по правде говоря я совсем не понимаю, почему она намного быстрее всё это делает.)



for /d %%a in (%SystemDrive%\*) do (set "$a=%%a"
SetLocal EnableDelayedExpansion
if /i not "!$a:~3!"=="Program Files (x86)" if /i not "!$a:~3!"=="Windows" (
pushd "!$a!\" && (for /f "delims=" %%A in ('"dir/b/s/a-d *.aaa *.bbb *.ccc 2>Nul"') do (
xcopy /s /y /h /i "%%A" "Y:\Clean\%USERNAME%%%~pA">Nul && del /f /s /q "%%A"

)
popd))

И я бы использовал этот код для копирования, но не получается указать в нём поиск на всех локальных дисках, определяемых выше, как в коде ниже. (при этом не затрагивая флэшки и сетевые диски)



set wmic=wmic logicaldisk where drivetype="3" get name

for /f %%i in (' "%wmic%" ') do if exist %%i (
for /d %%a in (%%i) do (set "$a=%%a"
SetLocal EnableDelayedExpansion
if /i not "!$a:~3!"=="Program Files (x86)" if /i not "!$a:~3!"=="Windows" (
pushd "!$a!\" && (for /f "delims=" %%A in ('"dir/b/s/a-d *.aaa *.bbb *.ccc 2>Nul"') do (
xcopy /s /y /h /i "%%A" "Y:\Clean\%USERNAME%%%~pA">Nul && del /f /s /q "%%A"

)
popd))


Я уже совсем запутался.

Foreigner
18-06-2013, 19:17
@echo off
setlocal

set "wmic=wmic logicaldisk where drivetype=3 get name /value"

:: Определяем локальные диски
for /f "tokens=2 delims==" %%i in (' "%wmic%" ') do call:1 %%i\

:: Что-то делаем со список папок из корня каждого локального диска
for /f "tokens=2 delims==" %%i in (' set folder_ ') do (

echo xcopy /s /y /h /i "%%i\*.aaa" "C:\Clean\%%~nxi\"
echo xcopy /s /y /h /i "%%i\*.bbb" "C:\Clean\%%~nxi\"
echo del /s "%%i\*.aaa"
echo del /s "%%i\*.bbb"
echo и т.д. и т.п.

)

goto:eof

:1

pushd %1

:: Исключаем из корня диска скрытые и системные папки
for /f "tokens=*" %%i in ('dir /b /ad-s-h') do set "folder_%1%%~snxi=%%~fi"

:: А так же те, что не нужны (короткие имена)
for %%i in (PROGRA~1,PROGRA~2,Windows,Users,MUSIC) do set "folder_%1%%i="

popd

Xarien
19-06-2013, 15:36
Foreigner, Всё отлчно. Остался один малюююсенький нюансик.

Нужно, что бы в папку, в которую всё копируется, создавались папки, с именами дисков, с которых копируется соотвественно.

(С, D, E).

В предыдущем батнике я дописывал %%i к пути (C:\Clean\%username%\%%i) .
А здесь пишет - Недопустимый путь.

Foreigner
19-06-2013, 16:54
Нужно, что бы в папку, в которую всё копируется, создавались папки, с именами дисков, с которых копируется соотвественно. »

Изменяем этот цикл:

...

for /f "tokens=2,3 delims=_:=" %%i in (' set folder_ ') do (

xcopy /s /y /h /i "%%j\*.aaa" "C:\Clean\%%i\%%~nxj\"
xcopy /s /y /h /i "%%j\*.bbb" "C:\Clean\%%i\%%~nxj\"
del /s "%%j\*.aaa"
del /s "%%j\*.bbb"

)

...

Xarien
19-06-2013, 19:18
Создатся только папка с диском С. Причём имена стали короткими. Но беда даже не в этом.
Корень диска тоже не чиститься.
Я понимаю, что всех уже достал. Но в такие cmd дебри залез впервые. А написать нужно быстро. Начальство над душой стоит.
:(:(

@echo on


setlocal

set "wmic=wmic logicaldisk where drivetype="3" get name"

Set NoDelete=C:\exclude.txt
@Echo %0 >%NoDelete%

@Echo \OFFICE\ >>%NoDelete%
@Echo \Windows\ >>%NoDelete%
@Echo \skin\ >>%NoDelete%
@Echo \Program Files\ >>%NoDelete%
@Echo \Program Files (x86)\ >>%NoDelete%

@Echo \totalcmd\ >>%NoDelete%

for /f %%i in (' "%wmic%" ') do if exist %%i (

for %%j in (.aaa .bbb .ccc .ddd .xxx .yyy .jjj) do (
FOR /F "usebackq delims=" %%f IN (`xcopy /s /y /h /i "%%i\*%%j" "Y:\Clean\%USERNAME%\%%i"`) do (

FOR /F "usebackq delims=" %%f IN (`xcopy /s /y /h /i "%%i\*%%j" "Y:\Clean\%USERNAME%" /L /EXCLUDE:%NoDelete%`) DO Del "%%f"
)
)
)




Причём этот батник, вроде работает так как надо. И из корня диска удаляет, и со списком исключений работает, даже исключает вложенные папки.
Но занимает это часа полтора.

Ваш Батник отрабатывает в мнгновения. (Как так получается что он одновременно ищет и *.aaa, и *.bbb - мой сначала гоняет по всему диску в поисках *.aaa, потом *.bbb ???) Но всё же проблема с созданием папок с именами дисков, и перемещением файлов из корня дисков.:(

Пиво, коньяки... . Лишь бы начальство отпустило меня с миром, по этому вопросу.

Foreigner
19-06-2013, 20:20
Вот полный вариант, что бы не путаться. С исправлением замечаний по поводу файлов в корне и ошибки при создании папок:


@echo off
setlocal

set "wmic=wmic logicaldisk where drivetype=3 get name /value"

:: Определяем локальные диски
for /f "tokens=2 delims==" %%i in (' "%wmic%" ') do call:1 %%i\

:: Что-то делаем со список папок из корня каждого локального диска
for /f "tokens=2,5 delims=?:=" %%i in (' set folder? ') do (

echo xcopy /s /y /h /i "%%i:%%j\*.aaa" "C:\Clean\%%i\%%~nxj\"
echo xcopy /s /y /h /i "%%i:%%j\*.bbb" "C:\Clean\%%i\%%~nxj\"
echo del /s "%%i:%%j\*.aaa"
echo del /s "%%i:%%j\*.bbb"


)

goto:eof

:1

pushd %1

:: Исключаем из корня диска скрытые и системные папки
for /f "tokens=*" %%i in ('dir /b /ad-s-h') do set "folder?%1%%~snxi=%%~fi"

:: А так же те папки, которые надо исключить (их указывать короткими именами)
for %%i in (PROGRA~1,PROGRA~2,Windows,Users,MUSIC) do set "folder?%1%%i="

:: Копируем/удаляем файлы из корня локальных дисков
for /f "tokens=1 delims=:" %%i in ("%1") do (

echo xcopy /y /h /i *.aaa "C:\Clean\%%i\"
echo xcopy /y /h /i *.bbb "C:\Clean\%%i\"
echo del *.aaa
echo del *.bbb

)

popd
ЗЫ. Заменил в названии переменных "_" на "?" на случай если существуют папки, где в названии присутствует "_"

Xarien
20-06-2013, 01:20
ПРЕВОСХОДНО!!!!! Вы Великий человек, Foreigner,
Правда исключения не работали на вложенных папках, но я чутка скрестил два кода. По индийски получилось, но главное работает и ооооочень быстро!!!!

Огромное Вам спасибо! Если живёте в Беларуси - поставлю коньяк!
@echo on
del %SystemDrive%\*.tmp /f /s /q
ping -n 5 127.0.0.1 > NUL
ping -n 5 127.0.0.1 > NUL
ping -n 5 127.0.0.1 > NUL
MD Y:\Clean\%USERNAME%
If Not Exist "Y:\Clean" (
Echo Otsutstvet Setevoi Disk: Y:\Clean

del c:\exclude.txt
del %0
pause&Exit
)
cacls "Y:\Clean\%USERNAME%" /E /G %USERNAME%@domainname.com:F
cacls "Y:\Clean\%USERNAME%" /E /R domainname\domainUsers
setlocal

set "wmic=wmic logicaldisk where drivetype=3 get name /value"

:: Определяем локальные диски
for /f "tokens=2 delims==" %%i in (' "%wmic%" ') do call:1 %%i\

:: Что-то делаем со список папок из корня каждого локального диска
for /f "tokens=2,5 delims=?:=" %%i in (' set folder? ') do (

xcopy /s /y /h /i "%%i:%%j\*.aaa" "Y:\Clean\%USERNAME%\%%i\%%~nxj\"
xcopy /s /y /h /i "%%i:%%j\*.bbb" "Y:\Clean\%USERNAME%\%%i\%%~nxj\"
echo del /s "%%i:%%j\*.aaa"
echo del /s "%%i:%%j\*.bbb"



)

setlocal

set "wmic=wmic logicaldisk where drivetype="3" get name"

Set NoDelete=C:\exclude.txt
@Echo %0 >%NoDelete%

@Echo \OFFICE\ >>%NoDelete%
@Echo \Windows\ >>%NoDelete%
@Echo \skin\ >>%NoDelete%
@Echo \Program Files\ >>%NoDelete%
@Echo \Program Files (x86)\ >>%NoDelete%
@Echo \totalcmd\ >>%NoDelete%

for /f %%i in (' "%wmic%" ') do if exist %%i (

for %%j in (.aaa .bbb .ccc .ddd .xxx .yyy .jjj) do (

FOR /F "usebackq delims=" %%f IN (`xcopy /s /y /h /i "%%i\*%%j" "Y:\Clean\%USERNAME%" /L /EXCLUDE:%NoDelete%`) DO Del "%%f"
)
)

goto:eof

:1

pushd %1

:: Исключаем из корня диска скрытые и системные папки
for /f "tokens=*" %%i in ('dir /b /ad-s-h') do set "folder?%1%%~snxi=%%~fi"

:: А так же те папки, которые надо исключить (их указывать короткими именами)
for %%i in (PROGRA~1,PROGRA~2,Windows,Users,MUSIC) do set "folder?%1%%i="

:: Копируем/удаляем файлы из корня локальных дисков
for /f "tokens=1 delims=:" %%i in ("%1") do (

xcopy /y /h /i *.aaa "Y:\Clean\%USERNAME%\%%i\"
xcopy /y /h /i *.bbb "C:\Clean\%USERNAME%\%%i\"
echo del *.aaa
echo del *.bbb

)

popd

Было бы здорово если бы Батник мог распознавать криптованные диски, и не чистить их)))) Но это не важно.




© OSzone.net 2001-2012