yanus74, думаю, этот вариант вам пригодится больше.
Код:
@Echo Off
SetLocal EnableDelayedExpansion
Set BasePath=C:\Temp
Set Result=result.txt
:: Перезаписываем лог
Echo [%Date% %Time%]: Started>"%Result%"
Echo.>>"%Result%"
:: Работа с корневой директорией
Call :icacls-fmt "%BasePath%"
:: Обход всех вложенных директорий
For /F "delims=" %%A In ('Dir "%BasePath%" /A:D /B /S') Do (
Call :icacls-fmt "%%~A"
)
Pause&Exit /B
:icacls-fmt
Echo [%~1]
:: Получаем разрешения, игнорируя последнюю строку о удачном завершении
For /F "delims=" %%A In ('icacls "%~1"^|Find /V ";" ') Do (
Set MarginLeft=&&Set $Path=%~1&&Set Data=%%A
:: Убираем лишний отступ с начала строк
Call :fmt $Path
:: Быстрая, нересурсозатратная в отличии от вызова find, проверка на наличие вхождения пути
If Not "!Data:%~1=!"=="!Data!" (
:: Пишем путь и исправленную строку
Echo [%~1]>>"%Result%"
Echo !Data:%~1=!>>"%Result%"
) Else (
:: Не трогаем строку, выводим как есть
Echo !Data!>>"%Result%"
)
)
Echo.>>"%Result%"
Exit /B
:fmt
:: Быстрый подсчёт длины строки
Set StrLen.S=A!%~1!
Set StrLen=0
For /L %%P In (12,-1,0) Do (
Set /A "StrLen|=1<<%%P"
For %%I In (!StrLen!) Do If "!StrLen.S:~%%I,1!"=="" Set /A "StrLen&=~1<<%%P"
)
:: Убираем отступ
For /L %%B In (1,1,!StrLen!) Do (Set MarginLeft= !MarginLeft!)
Set Data=!Data:%MarginLeft%=!
Exit /B
Лог тогда получается вот в таком формате:
Показать лог
Код:
[24.07.2013 20:43:12,19]: Started
[C:\Temp]
BUILTIN\Администраторы:(I)(F)
BUILTIN\Администраторы:(I)(OI)(CI)(IO)(F)
NT AUTHORITY\система:(I)(F)
NT AUTHORITY\система:(I)(OI)(CI)(IO)(F)
BUILTIN\Пользователи:(I)(OI)(CI)(RX)
NT AUTHORITY\Прошедшие проверку:(I)(M)
NT AUTHORITY\Прошедшие проверку:(I)(OI)(CI)(IO)(M)
[C:\Temp\fontconfig]
BUILTIN\Администраторы:(I)(F)
BUILTIN\Администраторы:(I)(OI)(CI)(IO)(F)
NT AUTHORITY\система:(I)(F)
NT AUTHORITY\система:(I)(OI)(CI)(IO)(F)
BUILTIN\Пользователи:(I)(OI)(CI)(RX)
NT AUTHORITY\Прошедшие проверку:(I)(M)
NT AUTHORITY\Прошедшие проверку:(I)(OI)(CI)(IO)(M)
[C:\Temp\Low]
BUILTIN\Администраторы:(I)(F)
BUILTIN\Администраторы:(I)(OI)(CI)(IO)(F)
NT AUTHORITY\система:(I)(F)
NT AUTHORITY\система:(I)(OI)(CI)(IO)(F)
BUILTIN\Пользователи:(I)(OI)(CI)(RX)
NT AUTHORITY\Прошедшие проверку:(I)(M)
NT AUTHORITY\Прошедшие проверку:(I)(OI)(CI)(IO)(M)
Обязательная метка\Низкий обязательный уровень:(OI)(CI)(NW)
[C:\Temp\mozilla-temp-files]
BUILTIN\Администраторы:(I)(F)
BUILTIN\Администраторы:(I)(OI)(CI)(IO)(F)
NT AUTHORITY\система:(I)(F)
NT AUTHORITY\система:(I)(OI)(CI)(IO)(F)
BUILTIN\Пользователи:(I)(OI)(CI)(RX)
NT AUTHORITY\Прошедшие проверку:(I)(M)
NT AUTHORITY\Прошедшие проверку:(I)(OI)(CI)(IO)(M)
[C:\Temp\pdk-Inquisitor]
BUILTIN\Администраторы:(I)(F)
BUILTIN\Администраторы:(I)(OI)(CI)(IO)(F)
NT AUTHORITY\система:(I)(F)
NT AUTHORITY\система:(I)(OI)(CI)(IO)(F)
BUILTIN\Пользователи:(I)(OI)(CI)(RX)
NT AUTHORITY\Прошедшие проверку:(I)(M)
NT AUTHORITY\Прошедшие проверку:(I)(OI)(CI)(IO)(M)