Я хотел бы скопировать права доступа к одному файлу. Я не хочу копировать данные, только разрешения.
Например, я создал новый файл и хочу, чтобы он имел те же разрешения, что и другой файл, который уже существовал.
Я хотел бы скопировать права доступа к одному файлу. Я не хочу копировать данные, только разрешения.
Например, я создал новый файл и хочу, чтобы он имел те же разрешения, что и другой файл, который уже существовал.
Ответы:
Вы можете сделать это в несколько шагов с помощью icacls и текстового редактора.
Сначала вы должны сохранить разрешения исходного файла
icacls C:\test\file1.bin /save perms.txt
вам нужно будет отредактировать perms.txtфайл, который вы только что создали, в любой папке, в которой вы работали icacls. Файл должен выглядеть примерно так:
file1.bin
D:AI(A;;0x1301bf;;;BU)(A;ID;FA;;;BA)(A;ID;FA;;;SY)(A;ID;0x1200a9;;;BU)(A;ID;0x1301bf;;;AU)
Вы можете игнорировать все вещи во втором ряду, все, что нас волнует, это первый ряд. Измените file1.binсвое новое имя файла file2.binи сохраните файл.
Теперь вам просто нужно восстановить права доступа ко второму файлу, обратите внимание, что на этот раз мы не включили имя файла. (Если вы получаете сообщение об ошибке « Не все привилегии или группы, на которые есть ссылки, назначены вызывающей стороне. » Запустите программу снова в командной строке с повышенными привилегиями.)
icacls C:\test\ /restore perms.txt
File.GetAccessControl()иFile.SetAccessControl()
Чтобы сделать это в пакете (скопируйте разрешения безопасности из подпапки или всех папок одного диска в одну и ту же папку / файл на другом диске), создайте, скажем, cpdacls.batфайл с таким содержимым:
@echo off
for /r %1 %%f in (.) do call :icacls_one %%f %2
goto :eof
:icacls_one
icacls %1\*.* /save %TEMP%\perms.txt
icacls %2.%~pnx1 /restore %TEMP%\perms.txt
del /q %TEMP%\perms.txt
А потом запусти как cpdacls.bat e:\ f:\.
Обратите внимание, что структура папки в папке назначения должна совпадать со структурой папки в исходной папке, взятой из ее корня , независимо от того, какую подпапку вы указали в качестве исходной папки.
На сегодняшний день самый простой способ - использовать PowerShell и запустить:
Get-Acl .\file1 | Set-Acl .\file2