Использование 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
с каретой ^
,
Замени обидеть )
с ^)
(будет более одного), так что )
рассматривается как обычный, а не особый характер.