Пакетный файл icacls требует нескольких каталогов с подстановочными знаками

4790
user153521

Я написал следующий пакетный файл, который отлично справляется с прохождением всех папок, начиная с номера 3 и применяя права доступа к папкам для любой подпапки 2010 года. Пример пакетных файлов приведен ниже:

для / D %% f в (D: \ Data \ 3 *) делать icacls "%% f \ 2010" / наследование: r / grant: r "Администраторы домена" :( OI) (CI) F

Вопрос : Как я могу улучшить этот скрипт, чтобы разрешить мне применять разрешения к определенной папке ниже ЛЮБОЙ папки в папках, начинающихся с 3?

Вот пример моей неудачной попытки:

для / D %% f в (D: \ Data \ 3 *) делать icacls "%% f * \ specificfolder" / наследование: r / grant: r "Администраторы домена" :( OI) (CI) F

2
обратите внимание на мою последнюю строку кода, сообщение убирает \ перед * user153521 12 лет назад 0
Можете ли вы привести пример дерева каталогов, над которым вы работаете? soandos 12 лет назад 0
@soandos Пример каталога: D: \ Data \ 3214 Client \ Accounts \ SpecificFolder Идея заключается в том, что он будет искать SpecificFolder в любой папке ниже 3214 'Client Directory.' user153521 12 лет назад 0

1 ответ на вопрос

1
TehTechGuy

Со следующим деревом каталогов:

D

Данные

31245 клиент

anyfolder

specificfolder

31246 клиент

anyfolder

specificfolder

Приведенный ниже код будет применять разрешения безопасности, указанные вами, к обоим каталогам, называемым «конкретной папкой».

@echo off for /D %%f in ("D:\Data\3*") do for /D %%d in ("%%f\*") do icacls "%%d\specificfolder" /inheritance:r /grant:r "Domain Admins":(OI)(CI)F 

ПРИМЕЧАНИЕ. - При этом используются вложенные циклы FOR, которые не поддерживаются DOS (COMMAND.COM). Это будет хорошо работать с системой NT (CMD.EXE).

Спасибо за ваш ответ на это. Команда в вашем ответе - это то, что я сейчас использую для всего, что вы указали в каталогах D: \ Data \ 3 *, и оно прекрасно работает. Я поместил звездочку в «%% f * \ specificfolder», потому что я хотел бы, чтобы скрипт развернул еще одну директорию (с любым именем, которое является причиной для *) и поиска там конкретной папки. Я надеюсь, что это поможет, дайте мне знать, если мне нужно объяснить это более подробно. user153521 12 лет назад 0
Обновил мой оригинальный ответ, чтобы отразить структуру каталогов, которую вы описали выше. Если вы хотите / хотите что-то еще, дайте мне знать. TehTechGuy 12 лет назад 0
Мы близко! Я пробовал код, но он отрезает каталог между номером клиента и именем из-за пробела. Я изменил ваш последний код следующим образом, я просто добавил кавычки вокруг "%% f \ *": для / D %% f в (D: \ Data \ 3 *) сделать для / D %% d в ("% % f \ * ") do icacls" %% d \ specificfolder "Пример: D: \ Data \ 31245 Smith \ anyfolder \ specificfolder Проблема заключается в том, что после того, как скрипт проходит через все правильные папки, он повторяется, но обрезает Каталог клиента до пробела похож на самый последний код. Пример: icacls D: \ Data \ 31245 \ anyfolder \ specificfolder user153521 12 лет назад 0
Я не могу воспроизвести вашу проблему. Что меня беспокоит, так это то, что вы говорите, что сценарий повторяется. Используете ли вы этот код в сочетании с другим кодом? Я снова отредактировал свой ответ, а также добавил цитату вокруг части `D: \ Data \ 3 *`; тем не менее, в моей системе все работало нормально только с внесенными вами изменениями. Возможно, вы имеете в виду это эхо? Попробуйте создать новый пакетный файл с двумя строками кода в моем ответе и дайте мне знать, что происходит. Если это не сработает, дайте мне полный путь, который вы используете. TehTechGuy 12 лет назад 0
Моя ошибка, сценарий не повторялся, я вчера неверно истолковал это с двумя похожими именованными файлами в тестовой среде. user153521 12 лет назад 0
Working code: - for /D %%f in (D:\Data\3*) do for /D %%d in ("%%f\*") do icacls "%%d\specificfolder" /inheritance:r /grant:r "Domain Admins":(OI)(CI)F user153521 12 лет назад 0
Slayer537 ты лучший, спасибо, что помог мне сделать эту работу !!!! user153521 12 лет назад 0