Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Старожил


Сообщения: 415
Благодарности: 257

Профиль | Отправить PM | Цитировать


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)
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:44, 24-07-2013 | #8