Использование icacls в командном файле (вопрос скобок)

Мне нужно скопировать папку в список компьютеров в определенное место, а затем сделать эту папку "Полный доступ для всех" и передать ее в наследство всем подпапкам и файлам. Я создаю текстовый файл со списком ПК, а затем включаю его в файл bat. Он выполняет простой пинг, чтобы увидеть, следует ли продолжить копирование, а затем выполняет простой оператор for/if/else, который обычно отлично работает для других задач "обслуживания"... Однако в этом случае я не могу получить команда icacls работает правильно. Команда, которую я первоначально использовал, была такой:

for /f %%a in (add_pclist.txt) do (

ping -n 2 %%a

if errorlevel 1 ( 

    echo %%a >> Test_PCFileCopyFail.txt
) else (

xcopy/e/h/i/y FOLDERNAME "\\%%a\c$\users\Public\Desktop"
icacls "\\%%a\c$\users\Public\Desktop\HMI" /grant Everyone:F /T
echo %%a >> Test_PCFileCopySuccess.txt
)
)

Однако, хотя это делает копирование и делает папку "Полный доступ" - когда я смотрю на вкладку "Безопасность" в "Свойствах", у всех нет галочек. Я выбираю "Дополнительно", и хотя "Все" отображается как "Полный доступ", для параметра "Яблоки" установлено значение "Только эта папка", и я хочу, чтобы в нем говорилось "Эта папка, подпапки и файлы".

Если я вручную запустить cmd:

icacls "\\%%a\c$\users\Public\Desktop\HMI" /grant Everyone:(OI)(CI)F /T

это работает. Однако, когда я помещаю эту команду в командный файл, она выдает ошибку

(CI was unexpected at this time.

Есть ли способ выполнить часть "Применяется к" без части (OI)(CI) - в противном случае, как я могу включить ее в пакетный файл без получения ошибки? Я также попытался включить / наследование: е в исходную команду icacls, но безрезультатно.

Большое спасибо!

1 ответ

Так как icacls Команда содержится внутри code block (заключенная в скобки последовательность команд) затем ) видно, чтобы закрыть это code block поэтому следующие персонажи видели cmd быть следующей командой.

Решение состоит в том, чтобы escape любой ) который предназначен для использования в качестве литерала, а не в качестве специального символа, который закрывает code block с каретой ^,

Замени обидеть ) с ^) (будет более одного), так что ) рассматривается как обычный, а не особый характер.

Другие вопросы по тегам