|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Изменение текста в файле |
|
CMD/BAT - [решено] Изменение текста в файле
|
Старожил Сообщения: 173 |
Добрый день.
Есть компьютер, на котором расположены общие папки по отделам. Есть необходимость регулярно готовить отчеты об изменениях в правах на папки, т.е. кто получил доступ до какой папки. Что есть и работает. Есть файл spisok.txt - в котором перечислены названия папок И есть bat-файл, вот с такими содержимым(z:\ - это сетевой диск, где расположены папки, а длинный путь это путь до моего компа. out - папка, рядом с bat-файлом): for /f %%a in (spisok.txt) do cacls z:\%%a >> "c:\documents and settings\user\desktop\cacls\%%a.LOG" xcopy /z /i *.log out del *.log cd out find /i "DOMAIN" *.log >> spisok_all_folder.txt ---------- FOLDER1.LOG z:\FOLDER1 DOMAIN\USER1:F DOMAIN\USER2:(OI)(CI)F ---------- FOLDER2.LOG DOMAIN\USER1:(OI)(CI)C DOMAIN\USER2:(OI)(CI)C F - полные OI - Для этой папки и ее файлов CI - Для этой папки и ее подпапок (IO)(CI) Для этой папки, ее подпапок и файлов (OI)(CI)(IO) Только для подпапок и файлов (CI)(IO) Только для подпапок (OI)(IO) Только для файлов и т.д. Вот только не знаю как. |
|
Отправлено: 11:57, 11-08-2009 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать tarasov.evgeny, как вариант обработки файла spisok_all_folder.txt:
@Echo Off SetLocal EnableExtensions EnableDelayedExpansion Set $LOG=spisok_all_folder.txt Set F=Полные Set C=Изменение Set W=Запись Set R=Чтение Set N=Отсутствие Set OICI=Для этой папки, ее подпапок и файлов Set CI=Для этой папки и ее подпапок Set OI=Для этой папки и ее файлов Set OICIIO=Только для подпапок и файлов Set CIIO=Только для подпапок Set OIIO=Только для файлов For /F "UseBackQ Delims=" %%i In ("%$LOG%") Do ( Set $LINE=%%i If Not "---"=="!$LINE:~0,3!" ( Set $RGHT=%%!$LINE:~-2,1!%% Set $LINE=!$LINE:~0,-2! Set $LINE=!$LINE:^)(=! Set $LINE=!$LINE:^(= %%! Set $LINE=!$LINE:^)=%%! [!$RGHT!] ) Else Echo. CALL Echo !$LINE! ) |
Отправлено: 14:48, 11-08-2009 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 173
|
Профиль | Отправить PM | Цитировать Помогите разобрать по строчкам:
SetLocal EnableExtensions EnableDelayedExpansion - здесь наверное просто опечатка? S - не нужна. Вы включаете всё возможности командной строки. вот здесь темный лес. Вы разбираете файл spisok_all_folder.txt по строчкам и каждую строчку запихиваете в переменную $line? А затем ещё страшнее ![]() If Not "---"=="!$LINE:~0,3!" ( Set $RGHT=%%!$LINE:~-2,1!%% Set $LINE=!$LINE:~0,-2! Set $LINE=!$LINE:^)(=! Set $LINE=!$LINE:^(= %%! Set $LINE=!$LINE:^)=%%! [!$RGHT!] ) Else Echo. CALL Echo !$LINE! set $RGHT и переменной LINE дается новое значение? Что значить знак ! Что значить :~0,2 Где это можно посмотреть в стандартном описание, я что-то такого не нахожу. |
Отправлено: 17:23, 11-08-2009 | #3 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Цитата tarasov.evgeny:
Цитата tarasov.evgeny:
![]() Цитата tarasov.evgeny:
Цитата tarasov.evgeny:
Цитата tarasov.evgeny:
Цитата tarasov.evgeny:
![]() |
||||||
Отправлено: 06:29, 12-08-2009 | #4 |
Старожил Сообщения: 173
|
Профиль | Отправить PM | Цитировать Я прошу прощения за назойливость, но я не могу найти описание вот таких частей как:
или Вот что это значит. Если в строке нет трех тире то, мы как-то разбираем строчку: Объясните хотя бы на примере [!$RIGHT] Из команды if мне понятно, что мы пропускаем строчку с тире и разбираем другие строки. Причем мы берем не всю строку а с какими-то атрибутами - !:~0,3! и добавляем две переменные. Одна из них задает права [!$RIGHT]. Опять же не понятно, почему два %, что такое !, и т.д. Вроде как бы одно подставляется в другое и так три раза, но например каким макаром в строку попадает перменная в который задано, что F - > полные. Для меня загадка. Вот хоть убейте не разберусь ![]() Я может не там смотрю (или не так ![]() ![]() |
|
Отправлено: 15:59, 12-08-2009 | #5 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать "!$LINE:~-2,1!" - возвращает предпоследний символ "$LINE"
"!$LINE:~0,-2!" - возвращает "$LINE" без последних двух символов цитата из справки ("SET /?"): Цитата:
CMD/BAT - [решено] Раскрытие имени файла во вложеном For CMD/BAT - [решено] Реализация функций длины переменной, выделение подстроки с параметрами в переменной. |
|
Отправлено: 16:21, 12-08-2009 | #6 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] есть ли способ быстрого поиска текста в файле ? | mitiya | Скриптовые языки администрирования Windows | 2 | 27-03-2010 23:33 | |
Разное - [решено] FoxPro 2.6 Замена фрагментов текста в txt-файле | Pashka | Программирование и базы данных | 7 | 18-01-2010 19:20 | |
Vista / 2008 - Изменение цвета текста во время установки | Smirniy | Автоматическая установка Windows 11 / 10 / 8 / 7 / Vista | 0 | 30-09-2009 22:18 | |
CMD/BAT - Расположение текста в файле в 2 колонки | Serg2010 | Скриптовые языки администрирования Windows | 6 | 28-08-2009 18:31 | |
CMD/BAT - Изменение курсоров в командном файле. | Kardinalli | Скриптовые языки администрирования Windows | 13 | 04-06-2009 16:14 |
|