Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Очистка содержимого дисков не затрагивая папки ОС

Ответить
Настройки темы
CMD/BAT - Очистка содержимого дисков не затрагивая папки ОС

Новый участник


Сообщения: 19
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 13:06, 13-06-2013

 

Ветеран


Сообщения: 1758
Благодарности: 966

Профиль | Цитировать


Код: Выделить весь код
@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

Последний раз редактировалось Foreigner, 18-06-2013 в 22:16.

Это сообщение посчитали полезным следующие участники:

Отправлено: 19:17, 18-06-2013 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Новый участник


Сообщения: 48
Благодарности: 3

Профиль | Отправить PM | Цитировать


Foreigner, Всё отлчно. Остался один малюююсенький нюансик.

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

(С, D, E).

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

Отправлено: 15:36, 19-06-2013 | #12


Ветеран


Сообщения: 1758
Благодарности: 966

Профиль | Цитировать


Цитата Xarien:
Нужно, что бы в папку, в которую всё копируется, создавались папки, с именами дисков, с которых копируется соотвественно. »
Изменяем этот цикл:
Код: Выделить весь код
...

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"

)

...

Отправлено: 16:54, 19-06-2013 | #13


Новый участник


Сообщения: 48
Благодарности: 3

Профиль | Отправить PM | Цитировать


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

PHP код: Выделить весь код

@echo on



setlocal

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

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

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

@Echo 
totalcmd >>%NoDelete%

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

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

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


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

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

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

Отправлено: 19:18, 19-06-2013 | #14


Ветеран


Сообщения: 1758
Благодарности: 966

Профиль | Цитировать


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

Код: Выделить весь код
@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
ЗЫ. Заменил в названии переменных "_" на "?" на случай если существуют папки, где в названии присутствует "_"

Последний раз редактировалось Foreigner, 19-06-2013 в 22:06.

Это сообщение посчитали полезным следующие участники:

Отправлено: 20:20, 19-06-2013 | #15


Новый участник


Сообщения: 48
Благодарности: 3

Профиль | Отправить PM | Цитировать


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

Огромное Вам спасибо! Если живёте в Беларуси - поставлю коньяк!
PHP код: Выделить весь код

@echo on

del 
%SystemDrive%*.tmp ///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 DiskY:Clean

del c
:exclude.txt
del 
%0
pause
&Exit

cacls "Y:\Clean\%USERNAME%" //%USERNAME%@domainname.com:F
cacls 
"Y:\Clean\%USERNAME%" //R domainnamedomainUsers
setlocal

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

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

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

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

Последний раз редактировалось Xarien, 20-06-2013 в 12:20. Причина: Дописать пару строк


Отправлено: 01:20, 20-06-2013 | #16



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Очистка содержимого дисков не затрагивая папки ОС

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Доступ - [решено] Ищу программу запрещающую удаление и перемещение папки, но не её содержимого. Houre Microsoft Windows 2000/XP 16 28-02-2011 02:26
Разное - [решено] винда не видит содержимого дисков в приводе bazon Microsoft Windows 2000/XP 9 22-11-2010 10:56
Очистка папки. zubkoff.s Microsoft Windows NT/2000/2003 4 10-11-2009 05:31
Ограничить размер содержимого папки clin Microsoft Windows NT/2000/2003 6 12-12-2008 13:55
Разное - При просмотре содержимого копакт дисков все иконки DimonR Microsoft Windows 2000/XP 5 23-05-2008 10:49




 
Переход