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

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

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

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

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

evle



1 + int rand(100);
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
reyst
Попробуй добавить "&& xcacls %%~fi  /G Все:F /Y"
Утилиту xcacls искать у Microsoft'а (http://www.microsoft.com/windows2000/techinfo/reskit/tools/existing/xcacls-o.asp)
Инфу брал тут.
Если винда английская, заменить Все на All.
 
Добавлено:
Alan Mon
Хорошая идея. Только вот

Цитата:
Всего их около 300



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

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

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
evle
Я немного запутался - строку "&& xcacls %%~fi  /G Все:F /Y"  
 нужно добавить в предыдущую команду For или она идет отдельной командой. Если отдельной, то гди фигурирует имя "PostBox"?
 
 
Добавлено:
Alan Mon
Структура предполагает, что у 300 пользователей есть 300 папок (папки-родители с правами только для чтения и запрета на удаление входящий папок), состоящие из папки PostBox с полным доступом для всех и с папки MyDocs с полным доступом только для пользователя владельца. Поэтому для того, чтобы  

Цитата:
У папки-родителя выставь права всем в полный доступ

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

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



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

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

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

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
evle
Тобишь общая команда будет такой?
 
for /R <Путь к корню> %%i in (.) do echo %%~fi\ | find "\PostBox\" && RD /S /Q %%~fi && MD %%~fi && xcacls %%~fi  /G Everyone:F /Y

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



1 + int rand(100);
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
reyst
20:41 12-05-2005
Цитата:
Тобишь общая команда будет такой?  

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

  1. Удалить
  2. Создать
  3. Дать полный доступ всем

Не забудь xcacls положить в зону досягаемости.

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

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

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
evle
БЛАГОДАРСТВУЮ!!! Все работает отлично, только вот возникла маленькая проблема:
в папках, имена которых более одного слова, независимо на английском или русском, возникает ошибка The system cannot find the file specifed. Помогает только убирание пробелов в названии папки. Можно ли тут что-то придумать ?

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

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
reyst
for /R <Путь к корню> %%i in (.) do echo %%~fi\ | find "\PostBox\" && RD /S /Q "%%~fi" && MD "%%~fi" && xcacls "%%~fi"  /G Everyone:F /Y
 
В смысле кавычки расставь. Если не заметил.

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

Всего записей: 1116 | Зарегистр. 22-07-2004 | Отправлено: 16:13 13-05-2005 | Исправлено: Alan Mon, 16:14 13-05-2005
reyst

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alan Mon
Спасибочки !!!
Все заработало!!!

А можно ли задать права, чтобы на создаваемы папки был поный доступ помимо удаления самой папки?

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



1 + int rand(100);
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
reyst
23:12 13-05-2005
Цитата:
А можно ли задать права, чтобы на создаваемы папки был поный доступ помимо удаления самой папки?  

Не понял. Поясни.

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

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

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
По данному скрипту установлено Everyone:F, тобишь на полный доступ. Первоначально стоит правило полный доступ и в Advanced настройках Security отмечено поле запрета на удаление - тобишь саму папку удалить Everyone нельзя. При этом скрипту это мешать не будет - скрипт при своей работе удаляет их без проблем ...

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

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Черт с ним с доступом - оставил на полный доступ - это особо не принципиально. Но появилась новая заморочка. Можно ли сделать так, чтобы те папки PostBox, в которых есть вложенная папка "InBox" не удалялись ...

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



1 + int rand(100);
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
reyst
for /R <Путь к корню> %%i in (.) do echo %%~fi\ | find "\PostBox\" && if not exist ­%%~fi\InBox (RD /S /Q "%%~fi" && MD "%%~fi" && xcacls "%%~fi"  /G Everyone:F /Y)
Что-то вроде этого. Как всегда не проверял. С доступом тоже можно сделать, но сложно. Говорят есть прога под названием SetACL, но у меня ее нет.

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

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

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
К сожалению не срабатывает - очищает все папки, в том числе и содержащие папки InBox
 
Добавлено:
может я не правильно выразился:
Сами папки InBox остаются - то, что и требуется, а вот их содержимое почему-то удаляется. Нужно, чтобы с папками PostBox, содержащих папку "InBox" вообще никаких действий не проводилось ...

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

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
evle
до финиша остался один шаг ...  
если не трудно подскажи как побороть эту проблему

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



1 + int rand(100);
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
reyst
Мысль такая: пропустить строку через еще один find "\PostBox\InBox\" и если не найдено (заюзать %ERRORLEVEL%), то удалять. Только надо похимичить будет. Сегодня - завтра подумаю, если не найдешь.  
Второй вариант: Временно сделать эти папки только для чтения и/или скрытыми.
Вообще, стучись в аську или почту, подумаем вместе.

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

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

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

Цитата:
Временно сделать эти папки только для чтения и/или скрытыми.

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

Всего записей: 247 | Зарегистр. 29-11-2004 | Отправлено: 09:58 23-05-2005
Felix



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
reyst
Давно наблюдаю за всеми мучениями, может мысль и не новая, но! кто мешает поставить Перл и написать полноценный скрипт для всевозможного колупания файлов и папок?

----------
In My Opinion!

Всего записей: 965 | Зарегистр. 20-01-2002 | Отправлено: 11:21 23-05-2005
Alan Mon

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
reyst
Давай еще раз точно сформулируй задачу. А то я уже запутался, что тебе нужно. Файлы из папок InBox нужно удалять или нет?
 
Добавлено:
Felix

Цитата:
кто мешает поставить Перл и написать полноценный скрипт для всевозможного колупания файлов и папок?

Видимо только то, что ни я, ни reyst, ни evle не знаем Perl . Предложи свой скрипт.
А решить эту задачку исключительно средствами .cmd мне, например, просто интересно.
 


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

Всего записей: 1116 | Зарегистр. 22-07-2004 | Отправлено: 11:33 23-05-2005
reyst

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alan Mon
 
С очисткой PostBox'ов я думаю разобрались. Тобишь скрипт находит все папки PostBox и "очищает" их путем удаления, создания и установления прав. Задача усложнилась тем, что:
папки PostBox, в составе которых есть папка "InBox" должны остаться нетронутыми, т.е. их не нужно очищать. Расшифровка: все папки (а не только InBox), которые находятся в этой папке PostBox и все файлы во вложенных папках должны остаться в том же состоянии.
 
После выполнения нового скрипта, разработанного ув. evle:
 
for /R <Путь к корню> %%i in (.) do echo %%~fi\ | find "\PostBox\" && if not exist %%~fi\InBox (RD /S /Q "%%~fi" && MD "%%~fi" && xcacls "%%~fi"  /G Everyone:F /Y)  
 
происходит следующее:
в папках PostBox, содеражащих папку "InBox", после выполнения скрипта вложенные папки остаются, что и требовуется, но содержимое вложенных папок удаляется ...

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

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
reyst
Так как задача усложнилась и обросла дополнительными условиями, предлагаю разгрузить эту навороченную команду и вернуться к первому моему варианту, чуть-чуть его подправив:

Код:
for /R <Путь к корню твоих папок> %%i in (.) do echo %%~fi\ | find "\PostBox\" && call :delet %%~fi
goto :end  
 
:delet
echo %1\ | find "\InBox\" && goto :end
rd /S /Q "%1"
md "%1"
xcacls "%1" /G Everyone:F /Y
 
:end


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

Всего записей: 1116 | Зарегистр. 22-07-2004 | Отправлено: 14:12 23-05-2005 | Исправлено: Alan Mon, 14:13 23-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