Я хотел бы скопировать права доступа к одному файлу. Я не хочу копировать данные, только разрешения.
Например, я создал новый файл и хочу, чтобы он имел те же разрешения, что и другой файл, который уже существовал.
Я хотел бы скопировать права доступа к одному файлу. Я не хочу копировать данные, только разрешения.
Например, я создал новый файл и хочу, чтобы он имел те же разрешения, что и другой файл, который уже существовал.
Ответы:
Вы можете сделать это в несколько шагов с помощью 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