PDA

Показать полную графическую версию : [решено] Создать кучу папок, дать разрешения.


senseye
04-08-2009, 12:58
Добрый день!

есть следующая структура:
есть папка Workplace, в ней папки, соответствующие каждой букве английского алфавита (A, B, C, D ... Z), в каждой "букве" куча папок соответствующих названиям компаний - партнеров, в них еще 6 папок, на которые нужно разные доступы разным группам дать.
Задача:
Создать в папках - буквах папки - партнеры и в них создать по 6 папок. и назначить на все это безобразие соответствующие права доступа.

привожу схему для наглядности:

NiOl
04-08-2009, 13:23
1. Непонятно, откуда брать названия партнеров. Если как в примере (Партнер-1, Партнер-2, etc) то по скольку штук?
2. Непонятно, какие права доступа Вам нужны. Уточните конкретнее, например Группе "adm" ресурсы "Contacts" и "Information" полные прав, а на остальные папки - только чтение, Группе "Managers" полные права на "PriceBooks" и "Products" и т.д.

senseye
04-08-2009, 14:15
1. Названия партнеров брать из зарее подготовленного списка (txt, xls, ini что удобнее)
я вижу примерно следующее:
letter: A

Astana-finance
Alma-TV
Asteros

а создавать будет примерно так:

if letter:=A then makedir F:\Workplace\A\....

ну..это конечно фантазии, но, я думаю, логика ясна. :)

2. в приведенном скрипте, написанном мной для раздачи прав, все описано.
xcacls Contracts /E /G "otccorporation\DL contracts FA":F
xcacls Contracts /E /G "otccorporation\Administrator":F
xcacls Contracts /E /G "otccorporation\DL contracts RO":R
xcacls Information /E /G "otccorporation\DL Information FA":F
xcacls Information /E /G "otccorporation\Administrator":F
xcacls Information /E /G "otccorporation\DL Information RO":R
xcacls Other Correspondence /E /G "otccorporation\DL other correspondence FA":F
xcacls Other Correspondence /E /G "otccorporation\Administrator":F
xcacls Pricebooks /E /G "otccorporation\DL Pricebooks FA":F
xcacls Pricebooks /E /G "otccorporation\Administrator":F
xcacls Pricebooks /E /G "otccorporation\DL Pricebooks RO":R
xcacls Products /E /G "otccorporation\DL Products FA":F
xcacls Products /E /G "otccorporation\Administrator":F
xcacls Products /E /G "otccorporation\DL Products RO":R
xcacls Projects /E /G "otccorporation\DL Projects FA":F
xcacls Projects /E /G "otccorporation\Administrator":F

NiOl
04-08-2009, 14:53
Вот, наверно так можно (ошибки не отрабатываются, но можно добавить вывод %ErrorLevel% в лог-файл):

@Echo Off
SetLocal EnableDelayedExpansion

set Wrk=C:\Temp
set List=C:\Partners.txt

for /F "Tokens=* Delims=" %%P in (%List%) do (
cd /D %Wrk%
Title Preparing "%%P"
set Letter=%%P
set Letter=!Letter:~0,1!
if not exist !Letter! md !Letter!
cd !Letter!
if not exist "%%P" md "%%P"
cd "%%P"
for %%N in (Contracts,Information,"Other Correspondence",Pricebooks,Products,Projects) do md %%N
rem Далее Ваш скрипт, только на счет "Xcacls" я не уверен - ни в XP-SP3 ни в W2k3SP1 такой команды не нашел...

cacls Contracts /E /G "otccorporation\DL contracts FA":F
cacls Contracts /E /G "otccorporation\Administrator":F
cacls Contracts /E /G "otccorporation\DL contracts RO":R
cacls Information /E /G "otccorporation\DL Information FA":F
cacls Information /E /G "otccorporation\Administrator":F
cacls Information /E /G "otccorporation\DL Information RO":R
cacls Other Correspondence /E /G "otccorporation\DL other correspondence FA":F
cacls Other Correspondence /E /G "otccorporation\Administrator":F
cacls Pricebooks /E /G "otccorporation\DL Pricebooks FA":F
cacls Pricebooks /E /G "otccorporation\Administrator":F
cacls Pricebooks /E /G "otccorporation\DL Pricebooks RO":R
cacls Products /E /G "otccorporation\DL Products FA":F
cacls Products /E /G "otccorporation\Administrator":F
cacls Products /E /G "otccorporation\DL Products RO":R
cacls Projects /E /G "otccorporation\DL Projects FA":F
cacls Projects /E /G "otccorporation\Administrator":F
)

файл с фирмами должен иметь такой вид:
Allergy
Anatoly Vasserman inc.
Booze
Cactus & co
Chlamydia Beauty Industrial
и т.д.

senseye
04-08-2009, 15:52
дык мой скрипт только на папку одного партнера, надо как то сделать чтобы, он на все папкис одинаковыми именами, в данной директории, назначал такие права.

NiOl
04-08-2009, 16:32
:o ... :lol:

Поясняю работу скрипта:
в переменные Wrk и List (кстати извиняюсь - там остались значения, на которых этот скрипт и тестил) вписывается полный путь к Вашей папке (Workplace кажется) и путь с именем файла списка фирм.

Далее в цикле из файла выбирается очередная фирма, от нее выделяется первая буква для раскладывания по каталогам A-B-C-D...W-Z, создается дерево каталогов Буква-Фирма, внутри создается пачка Ваших стандартных каталогов Contracts .. Projects и для них назначаются права по Вашему скрипту.
... из списка выбирается следующая фирма и процесс повторяется до тех пор, пока не будут созданы все подкаталоги для каждой фирмы и для каждой будут назначены права.

senseye
05-08-2009, 07:25
xcacls это отдельно устанавливаемая программа, которая работает из командной строки, скрипт я проверял свой - работает нормально. Мне просто сохранить Батник нужно, так ведь? я впервые со скриптами такими дело имею )

NiOl
05-08-2009, 11:31
Cоздаешь текстовый файл с расширением *.BAT, например Partners.bat
В него через буфер обмена вставляешь текст, исправляешь строки set Wrk=C:\Temp и set List=C:\Partners.txt на нужные тебе, сохраняешь и запускаешь. После чего пробегаешь по некоторым фирмам и проверяешь назначенные права.

senseye
05-08-2009, 13:03
Создал файл Partners.txt написал туда "партнеров" на разные буквы начинающихся, создал папку D:/test, кинул в корень D:/ файл script_folders.bat с твоим кодом. изменил set Wrk=D:\test и set List=D:\Partners.txt , Запускаю, на долю секунды появляется черное окно командной строки, но ничего не создается, пробовал убирать cacls, не помогло, тоже самое...

NiOl
06-08-2009, 17:36
Извиняюсь за задержку - была работа.
Чтож, добавляем краткий лог-файл (появится рядом с батником) и запускаем еще раз. Лог-файл прошу выложить сюда.
Можно для скорости и во избежание засирания форума (не уверен, что это по правилам форума) связаться по асе: 268808419

@Echo Off
SetLocal EnableDelayedExpansion

set Wrk=D:\Test
set List=D:\Partners.txt
set Log=%~dpn0.log

if not Exist %List% (
echo Error: List-file not found!>>%Log%
exit
)
for /F "Tokens=* Delims=" %%P in (%List%) do (
cd /D %Wrk%
echo Preparing "%%P" at !CD! (%Wrk%^) >>%Log%
Title Preparing "%%P"
set Letter=%%P
set Letter=!Letter:~0,1!
if not exist !Letter! md !Letter!
cd !Letter!
echo ... enter !CD!>>%Log%
if not exist "%%P" md "%%P"
cd "%%P"
echo ... enter !CD!>>%Log%
for %%N in (Contracts,Information,"Other Correspondence",Pricebooks,Products,Projects) do md %%N
dir /b /on>>%Log%

xcacls Contracts /E /G "otccorporation\DL contracts FA":F >>%Log%
xcacls Contracts /E /G "otccorporation\Administrator":F >>%Log%
xcacls Contracts /E /G "otccorporation\DL contracts RO":R >>%Log%
xcacls Information /E /G "otccorporation\DL Information FA":F >>%Log%
xcacls Information /E /G "otccorporation\Administrator":F >>%Log%
xcacls Information /E /G "otccorporation\DL Information RO":R >>%Log%
xcacls Other Correspondence /E /G "otccorporation\DL other correspondence FA":F >>%Log%
xcacls Other Correspondence /E /G "otccorporation\Administrator":F >>%Log%
xcacls Pricebooks /E /G "otccorporation\DL Pricebooks FA":F >>%Log%
xcacls Pricebooks /E /G "otccorporation\Administrator":F >>%Log%
xcacls Pricebooks /E /G "otccorporation\DL Pricebooks RO":R >>%Log%
xcacls Products /E /G "otccorporation\DL Products FA":F >>%Log%
xcacls Products /E /G "otccorporation\Administrator":F >>%Log%
xcacls Products /E /G "otccorporation\DL Products RO":R >>%Log%
xcacls Projects /E /G "otccorporation\DL Projects FA":F >>%Log%
xcacls Projects /E /G "otccorporation\Administrator":F >>%Log%
)

senseye
07-08-2009, 14:15
Классно! получилось! папки создаются правильно, по первой букве фирмы, дальше - весь пучок папок в "фирме - партнере", но вот мой скрипт как то странно работает, права назначает, но совершенно левые, у меня на группы стоит назначение он назначает отдельны людям... странно вот лог:

NiOl
07-08-2009, 18:18
1. Что сразу бросилось в глаза - я тупо скопировал список команд по назначению прав. В строках по назначению прав на Other Correspondence название каталога обязательно нужно заключить в кавычки - скрипт xcacls пытается назначать права каталогу Other.

2. Других ошибок не вижу. Попробуйте рукчами запустить Xcacls на кокой-нить каталог - если окажется, что вместо групп (на примере группы "DL contracts FA") права прописаны пользователям, то это дело рук скрипта Xcacls и тогда советую воспользоваться просто командой cacls - синтаксис тотже (можно добавить ключ /T), но группам права назначаются гарантированно (у меня на ней реализована автоматическая шара бэкапного диска).

3. Уточнение - "otccorporation" - это Ваш домен? Если да и компьютер, с которого скрипт запущен, также в домене, то название домена можно опускать.

senseye
10-08-2009, 07:31
1. Что сразу бросилось в глаза - я тупо скопировал список команд по назначению прав. В строках по назначению прав на Other Correspondence название каталога обязательно нужно заключить в кавычки - скрипт xcacls пытается назначать права каталогу Other. »

Да, Вы правы, в кавычки заключил.

2. Других ошибок не вижу. Попробуйте рукчами запустить Xcacls на кокой-нить каталог - если окажется, что вместо групп (на примере группы "DL contracts FA") права прописаны пользователям, то это дело рук скрипта Xcacls и тогда советую воспользоваться просто командой cacls - синтаксис тотже (можно добавить ключ /T), но группам права назначаются гарантированно (у меня на ней реализована автоматическая шара бэкапного диска). »

Xcacls назначал все правильно, я его тестил где-то неделю :) (наверное, в силу незнания), сейчас все правильно назначилось! дело было в том, что в F:/ лежал скрипт test.bat и каким то макаром цеплялся и выполнялся :) а в нем то и были мои тесты )

3. Уточнение - "otccorporation" - это Ваш домен? Если да и компьютер, с которого скрипт запущен, также в домене, то название домена можно опускать. »
пробовал, получилось не ахти :) лучше так, от этого ж хуже не становится.


идем дальше: натолько что созданную папку - партнера нужно следующее: xcacls *letter*/G "otccorporation\DL name RO":R вот тут то и затык, получается, папку создал, как то проверил что только что создал, и назначил на него разрешение...и еще, надо бы убрать наследование в скрипте...

NiOl
10-08-2009, 12:26
Думаю, что на "букву" также стоит дать права Системе и админу (полные), чтобы потом не корячится.
Фирмы унаследуют права "DL name RO", Системе и админу а для Contracts .. Projects права будут без наследования (первая команда назначения без ключа /E).

@Echo Off
SetLocal EnableDelayedExpansion

set Wrk=D:\Test
set List=D:\Partners.txt
set Log=%~dpn0.log

if not Exist %List% (
echo Error: List-file not found!>>%Log%
exit
)
for /F "Tokens=* Delims=" %%P in (%List%) do (
cd /D %Wrk%
echo Preparing "%%P" at %Wrk% >>%Log%
Title Preparing "%%P"
set Letter=%%P
set Letter=!Letter:~0,1!
if not exist !Letter! (
md !Letter!
xcacls !Letter! /G "otccorporation\DL name RO":R
xcacls !Letter! /E /G System:F
xcacls !Letter! /E /G "otccorporation\Administrator":F
)
cd !Letter!
if not exist "%%P" md "%%P"
cd "%%P"
for %%N in (Contracts,Information,"Other Correspondence",Pricebooks,Products,Projects) do md %%N
dir /b /on>>%Log%

echo Y|xcacls Contracts /G "otccorporation\DL contracts FA":F
xcacls Contracts /E /G "otccorporation\Administrator":F
xcacls Contracts /E /G "otccorporation\DL contracts RO":R
echo Y|xcacls Information /G "otccorporation\DL Information FA":F
xcacls Information /E /G "otccorporation\Administrator":F
xcacls Information /E /G "otccorporation\DL Information RO":R
echo Y|xcacls Other Correspondence /G "otccorporation\DL other correspondence FA":F
xcacls Other Correspondence /E /G "otccorporation\Administrator":F
echo Y|xcacls Pricebooks /G "otccorporation\DL Pricebooks FA":F
xcacls Pricebooks /E /G "otccorporation\Administrator":F
xcacls Pricebooks /E /G "otccorporation\DL Pricebooks RO":R
echo Y|xcacls Products /G "otccorporation\DL Products FA":F
xcacls Products /E /G "otccorporation\Administrator":F
xcacls Products /E /G "otccorporation\DL Products RO":R
echo Y|xcacls Projects /G "otccorporation\DL Projects FA":F
xcacls Projects /E /G "otccorporation\Administrator":F
)

Вроде так...

senseye
12-08-2009, 07:20
Прям то что надо! спасибо большое! создает, читает из файла, назначает права. благодарю!

MMariarti
05-02-2016, 05:46
Здравствуйте, можно опять поднять эту тему, мне интересна самим схема и если чесно, помощь в написании скрипта, делаем батник к нему txt, с описанием необходимых папок. помогите сделать данный скрипт




© OSzone.net 2001-2012