Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » В помощь системному администратору » Написание скрипта для удаления файлов в папках c одним имене

Модерирует : lynx, Crash_Master, dg, emx, ShriEkeR

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3

Открыть новую тему     Написать ответ в эту тему

reyst

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть у меня на сервере Windows 2000 структура папок для всего предприятия. При этом для каждого пользователя и отдела есть своя папка PostBox. Всего их около 300. Структура такая: Общая папка предприятия - Папки Отделов - Папка PostBox отдела + Папки сотрудников, состоящие из папок MyDocs и PostBox. Задача написать скрипт, который бы удалял все содержимое папок PostBox. Не подскажите как он будет выглядеть, может кто уже сталкивался с подобной задачей.

Всего записей: 247 | Зарегистр. 29-11-2004 | Отправлено: 17:13 28-04-2005
FreemanRU



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
reyst
 

Цитата:
 
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colFolders = objWMIService.ExecQuery("Select * from Win32_Directory where Path = '\\общая папка предприятия\\' and Drive = 'c:' and Name = 'PostBox' ")
 
For Each objFolder in colFolders
Wscript.Echo objFolder.Name
Next
 
Wscript.Echo "done"
 

проверь так, потом всместо выделенного жирным поставь:

Цитата:
 
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.DeleteFolder(objFolder.Name)
Set objFolder = objFSO.CreateFolder(objFolder.Name)
 

 
Сообщи если работает....

----------
Если не получается с первого раза - прочти инструкцию. (с)
"Откуда нам знать, что такое война, если мы не знаем мира..."(с)
Записки

Всего записей: 3799 | Зарегистр. 16-07-2004 | Отправлено: 17:56 28-04-2005 | Исправлено: FreemanRU, 18:17 28-04-2005
evle



1 + int rand(100);
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
reyst
Немного поковырялся.

Код:
 
for /R %%i in (*) do echo %%i >> allfiles
findstr /l "\\PostBox\\" allfiles > filestoremove
for /f %%i in (filestoremove) do del %%i
del allfiles
del filestoremove
 
 
Немного долго. По идее как-то можно и в одну строку, но пока не вышло. Удаляет файлы, в пути которых содержится папка PostBox (в любом месте). Не трогает скрытые файлы.
 
Добавлено:
FreemanRU
Ты как такого монстра собрал?

----------
For every complex problem, there is a solution that is simple, neat, and wrong.

Всего записей: 2110 | Зарегистр. 03-02-2005 | Отправлено: 19:05 28-04-2005
FreemanRU



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
evle

Цитата:
Ты как такого монстра собрал

www.microsoft.com/scripting
 
Но мне это монстром не кажется...
Это мне проще понять чем то, что ты написал
 
Да и у меня быстрее ИМХО. Это ты 3 прохода делаешь. Если у reyst 300 пользователей, пусть у каждого по 50 (линивые они у него) файлоффф....... это примерно 15000 получается.. долговато ИМХО будет...
Да и у VBS приемущество есть - по сетке работает...


----------
Если не получается с первого раза - прочти инструкцию. (с)
"Откуда нам знать, что такое война, если мы не знаем мира..."(с)
Записки

Всего записей: 3799 | Зарегистр. 16-07-2004 | Отправлено: 19:48 28-04-2005
evle



1 + int rand(100);
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
FreemanRU
00:48 29-04-2005
Цитата:
Да и у меня быстрее ИМХО

Вряд ли, SQL запросы не очень быстро выполняются, но это не особо важно.

Цитата:
Это ты 3 прохода делаешь

По файловой системе полтора прохода как и у тебя (выборка файлов и удаление их части) То что в середине ходит по одному файлу со списком.
Цитата:
Да и у VBS приемущество есть - по сетке работает...  

Согласен. Только было указано, что файлы на сервере.
В общем, на вкус и цвет...

----------
For every complex problem, there is a solution that is simple, neat, and wrong.

Всего записей: 2110 | Зарегистр. 03-02-2005 | Отправлено: 20:01 28-04-2005
Alan Mon

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
evle
В твоем варианте, ИМХО, будут удалены файлы в папках, содержащих в своем пути "PostBox". А это насколько я понял неверно. Нужно удалять в папках, называющихся "PostBox". Это не одно и то же.
reyst
Я тут тоже батник набросал:

Код:
for /R <Путь к корню твоих папок> %%i in (.) do call :delet %%~fi
goto :end
 
:delet
set DIRPATH=%1
echo %DIRPATH:~-7% | find "PostBox" && del /Q %1\*.*
 
:end

Вроде работает.

----------
Ребята, давайте жить дружно. Кот Леопольд

Всего записей: 1116 | Зарегистр. 22-07-2004 | Отправлено: 11:25 29-04-2005 | Исправлено: Alan Mon, 11:48 29-04-2005
evle



1 + int rand(100);
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alan Mon
16:25 29-04-2005
Цитата:
Это не одно и то же.  

По моему, результат одинаков, у файлов в папке PostBox в пути содержится \PostBox\, и наоборот, у файлов, в пути \PostBox\ найдется предок (папка), лежащая в папке PostBox. Так что это одно и то же.
А вот в твоем коде ошибка: кроме нужных файлов удалится также все из папок "notPostBox", "PostBox1" и др. Нужно вот так:  
echo %DIRPATH:~-7% | find "\\PostBox\\" && del /Q %1\*.*  


----------
For every complex problem, there is a solution that is simple, neat, and wrong.

Всего записей: 2110 | Зарегистр. 03-02-2005 | Отправлено: 12:25 29-04-2005
Alan Mon

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
evle
Результат не одинаков. У файлов в папке PostBox\Pupkin тоже в пути содержится PostBox.  

Цитата:
кроме нужных файлов удалится также все из папок "notPostBox", "PostBox1"

А вот это верное замечание. Из notPostBox - удалится. Но из PostBox1 - нет.
 
Если в папках PostBox нет подпапок или если из этих подпапок нужно тоже удалить файлы тогда можно вообще одной строкой обойтись.

Код:
for /R <Путь к корню> %%i in (.) do echo %%~fi\ | find "\PostBox\" && del /Q %%~fi\*.*


----------
Ребята, давайте жить дружно. Кот Леопольд

Всего записей: 1116 | Зарегистр. 22-07-2004 | Отправлено: 13:42 29-04-2005 | Исправлено: Alan Mon, 13:46 29-04-2005
evle



1 + int rand(100);
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alan Mon
18:42 29-04-2005  
Вариант с %DIRPATH:~-7%  вообще не работает, т. к. получается "ostBox " поставил 8 - заработало.  

Цитата:
Результат не одинаков. У файлов в папке PostBox\Pupkin тоже в пути содержится PostBox.  

Да. действительно, результат не одинаков: мой вариант очищает вложенные папки, а твой нет. Остается выяснить, что нужно было автору вопроса.

Цитата:
for /R <Путь к корню> %%i in (.) do echo %%~fi\ | find "\PostBox\" && del /Q %%~fi\*.*  

Как ни странно, работает. Хотя я так и не понял, почему \" не обрабатывается, как эскейп-последовательность...

----------
For every complex problem, there is a solution that is simple, neat, and wrong.

Всего записей: 2110 | Зарегистр. 03-02-2005 | Отправлено: 20:51 29-04-2005
reyst

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Попробовал все приведенные здесь 4 варианта:
 
1)  
strComputer = "."  
Set objWMIService = GetObject("winmgmts:" _  
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")  
Set colFolders = objWMIService.ExecQuery("Select * from Win32_Directory where Path = '\\общая папка предприятия\\' and Drive = 'c:' and Name = 'PostBox' ")  
 
For Each objFolder in colFolders  
Set objFSO = CreateObject("Scripting.FileSystemObject")  
objFSO.DeleteFolder(objFolder.Name)  
Set objFolder = objFSO.CreateFolder(objFolder.Name) Next  
 
Wscript.Echo "done"  
 
 
2)
for /R <Путь к корню твоих папок> %%i in (.) do call elet %%~fi  
goto :end  
 
elet  
set DIRPATH=%1  
echo %DIRPATH:~-7% | find "PostBox" && del /Q %1\*.*  
 
:end  
 
3)
for /R %%i in (*) do echo %%i >> allfiles  
findstr /l "\\PostBox\\" allfiles > filestoremove  
for /f %%i in (filestoremove) do del %%i  
del allfiles  
del filestoremove  
 
4)
for /R <Путь к корню> %%i in (.) do echo %%~fi\ | find "\PostBox\" && del /Q %%~fi\*.*  
 
Из них сработал только 4-ый!!!
Сработал он правда с двумя ограничениями: не удаляются системные файлы и не удаляются вложенные в папку PostBox папки, удаляются только находящиеся в них папки. Задача стоит удалять полностью все содержимое папок PostBox (вложенные папки и файлы)...
 
 
 
 
Добавлено:
Не поделитесь ли ссылочками, где можно было поподробнее узнать о приведенных Вами командах, а то "смотрю в книгу и вижу фигу"

Всего записей: 247 | Зарегистр. 29-11-2004 | Отправлено: 13:15 04-05-2005
evle



1 + int rand(100);
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
reyst
18:15 04-05-2005
Цитата:
Из них сработал только 4-ый!!!  

Странно. Ты куда их записывал?

Цитата:
вложенные папки и файлы

Предупреждать надо. Подумаю на досуге.
 

Цитата:
где можно было поподробнее узнать о приведенных Вами командах

По батникам во встроенной справке. Поиск по слову "CMD". По vbScript в MSDN, хотя может быть есть что попроще.

----------
For every complex problem, there is a solution that is simple, neat, and wrong.

Всего записей: 2110 | Зарегистр. 03-02-2005 | Отправлено: 13:43 04-05-2005
4esz



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Народ подскажите плиз как програмно расшарить папку на флешке при ее подключении  
причем у пользователя отсутствуют права админа. Нужно это для следующего: есть 1Ска распределенная шеф таскает на флешке файлы обмена между базами, казалось бы все  просто. но 1Ска стоит под терминалом, а у шефа на его машине нет прав администратора, соответственно он не может расшарить подключенную флешку(да и лениво это ему каждый раз делать). И еще пробовал расшаривать флешку входя под админом, все прекрасно работает, но как только выключают комп при следующем включении Винда почемуто "забывает" что флешка была расшаренной , можно ли как то это забороть?

Всего записей: 75 | Зарегистр. 26-06-2003 | Отправлено: 14:06 04-05-2005
reyst

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
evle
В первом варианте сохранил как vbs-файл и запускал через wscript, во всех остальных случаях запускал как bat-файлы с корневой папки с PostBox-ами.

Всего записей: 247 | Зарегистр. 29-11-2004 | Отправлено: 15:24 04-05-2005
evle



1 + int rand(100);
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
reyst
во втором варианте надо 7 заменить на 8 (у меня так заработал).  
3-й сам проверял, у меня работал.
Если сами папки Postbox можно ненадолго удалить, то попробуй такой вариант (нет времени проверять, но может и сработать)
for /R <Путь к корню> %%i in (.) do echo %%~fi\ | find "\PostBox\" && RD /S /Q %%~fi && MD %%~fi

----------
For every complex problem, there is a solution that is simple, neat, and wrong.

Всего записей: 2110 | Зарегистр. 03-02-2005 | Отправлено: 15:46 04-05-2005
reyst

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Если сами папки Postbox можно ненадолго удалить

 
сами папки Postbox должны бязательно остаться - их около 300-х штук - создавать заново проблематично

Всего записей: 247 | Зарегистр. 29-11-2004 | Отправлено: 16:15 04-05-2005
evle



1 + int rand(100);
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
reyst
Ты не понял, они тут же и создаются, в этом же батнике (должны, во всяком случае), просто права не выставляются на них, если специфические были.

----------
For every complex problem, there is a solution that is simple, neat, and wrong.

Всего записей: 2110 | Зарегистр. 03-02-2005 | Отправлено: 17:13 04-05-2005
FreemanRU



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
reyst

Цитата:
where Path = '\\общая папка предприятия\\' and Drive = 'c:' and Name = 'PostBox'  

 
Ты Path и Drive надеюсь поправил?  
Какая ошибка вываливается?


----------
Если не получается с первого раза - прочти инструкцию. (с)
"Откуда нам знать, что такое война, если мы не знаем мира..."(с)
Записки

Всего записей: 3799 | Зарегистр. 16-07-2004 | Отправлено: 17:44 04-05-2005
reyst

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
FreemanRU

Цитата:
Ты Path и Drive надеюсь поправил?  

 
конечно
 

Цитата:
Какая ошибка вываливается?  

 
ошибок как раз и нет,  но результата к сожелению тоже - файлы не удаляются

Всего записей: 247 | Зарегистр. 29-11-2004 | Отправлено: 19:12 06-05-2005
reyst

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
evle
 
ОК! Благодарю! Все было бы класс, но:  
 

Цитата:
просто права не выставляются на них, если специфические были.

 
К сожалению это очень даже существенно. При выполнения скрипта создаюся папки PostBox с правами унаследованными от папки-родителя, а мне нужно чтобы Все имели полный доступ. Можно ли как-нибудь дописать команду  
for /R <Путь к корню> %%i in (.) do echo %%~fi\ | find "\PostBox\" && RD /S /Q %%~fi && MD %%~fi
 
, чтобы права (Security) были всем на полный доступ или может можно другой командой это сделать?

Всего записей: 247 | Зарегистр. 29-11-2004 | Отправлено: 12:19 12-05-2005
Alan Mon

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
reyst
У папки-родителя выставь права всем в полный доступ, но "Только для подпапок и файлов"

----------
Ребята, давайте жить дружно. Кот Леопольд

Всего записей: 1116 | Зарегистр. 22-07-2004 | Отправлено: 12:40 12-05-2005
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3

Компьютерный форум Ru.Board » Компьютеры » В помощь системному администратору » Написание скрипта для удаления файлов в папках c одним имене


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2025

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru