2014-01-23 2 views
2

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

Мы имеем следующую структуру папок

Folder1 Folder1 \ Client1 Folder1 \ Client2 Folder1 \ Client3 Затем в каждой папке клиента мы имеем несколько вложенных папок, например, Folder1 \ Client1 \ SubFolder1 Folder1 \ Client1 \ SubFolder2 Folder1 \ Client1 \ SubFolder3

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

for /f %%g in ('dir "f:\temp\" /ad /b') do for /f %%a in ('dir %%~fg /ad /b') do icacls 
"%%~fg\%%a" /grant:r domain\mygroup:(OI)(CI)M 

Это прекрасно работает, но для клиентов и подпапок, содержащих пробелы, он не работает. Например

Folder1\Client1\Sub Folder 1 

бы как

Folder1\Client1\Sub\ 

Тесно следуют системе не удается найти указанный файл ошибок. Есть идеи?

Это, кстати, работает на сервере 2003 года.

ответ

1

I «d использовать

for /f "delims=" %%g in ('dir "f:\temp\" /ad /b') do (
for /f "delims=" %%a in ('dir %%~fg /ad /b') do (
    icacls "%%~fg\%%a" /grant:r domain\mygroup:(OI)(CI)M 
) 
) 

"delims=" отключает разделителей и так applie s вся строка dir на метапеременные (%% g, %% a) вне зависимости от пробелов.

Я сломал команду на многих строках для удобства чтения. Вы можете поместить все на одной линии, если хотите, когда ( после каждого do и последних двух ) станет излишним.

2

Разделители по умолчанию для цикла FOR - это пробел и табуляция. Вам нужно указать разделители только на обратную косую черту. Например:

for /f "tokens=* delims=\" %%g in ('dir "f:\temp\" /ad /b') do ... 

Смотрите здесь для получения дополнительной информации: Tokens and Delims

Есть несколько других дополнительных вопросов, с помощью сценария, но я считаю, что следующий будет работать для вас:

SET folder=F:\temp 
for /f "tokens=* delims=\" %%g in ('dir "%folder%\" /ad /b') do for /f %%a in ('dir "%folder%\%%g" /ad /b') do icacls "%folder%\%%g\%%a" /grant:r domain\mygroup:(OI)(CI)M 
Смежные вопросы