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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Изменение текста в файле

Ответить
Настройки темы
CMD/BAT - [решено] Изменение текста в файле

Старожил


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

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


Добрый день.
Есть компьютер, на котором расположены общие папки по отделам. Есть необходимость регулярно готовить отчеты об изменениях в правах на папки, т.е. кто получил доступ до какой папки.
Что есть и работает.
Есть файл spisok.txt - в котором перечислены названия папок
Код: Выделить весь код
folder1
folder2
folder3
...
foldern
И есть 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
На выходе получаем текстовый файл 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
Благодарности: 1563

Профиль | Отправить 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!
)
P.S. Но это только для стандартных прав!
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:48, 11-08-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


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

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


Помогите разобрать по строчкам:

SetLocal EnableExtensions EnableDelayedExpansion - здесь наверное просто опечатка? S - не нужна. Вы включаете всё возможности командной строки.

вот здесь темный лес.
Код: Выделить весь код
For /F "UseBackQ Delims=" %%i In ("%$LOG%") Do (
   Set $LINE=%%i
Вы разбираете файл 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
Благодарности: 1563

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


Цитата tarasov.evgeny:
здесь наверное просто опечатка? »
"SetLocal /?"
Цитата tarasov.evgeny:
разбираете файл spisok_all_folder.txt по строчкам и каждую строчку запихиваете в переменную $line? »
именно так ("FOR /?")
Цитата tarasov.evgeny:
Если в переменной есть три тире '---' »
наоборот - если нет (If Not) - "IF /?"
Цитата tarasov.evgeny:
Что значить знак ! »
"CMD /?"
Цитата tarasov.evgeny:
Что значить :~0,2 »
"SET /?"
Цитата tarasov.evgeny:
Где это можно посмотреть в стандартном описание »
вроде уже ответил...

Отправлено: 06:29, 12-08-2009 | #4


Старожил


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

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


Я прошу прощения за назойливость, но я не могу найти описание вот таких частей как:
Код: Выделить весь код
:~0,2
или
Код: Выделить весь код
:~-2,1!
Вот что это значит. Если в строке нет трех тире то, мы как-то разбираем строчку:
Код: Выделить весь код
If Not "---"=="!$LINE:~0,3!" (
      Set $RGHT=%%!$LINE:~-2,1!%%
      Set $LINE=!$LINE:~0,-2!
Объясните хотя бы на примере [!$RIGHT]
Из команды if мне понятно, что мы пропускаем строчку с тире и разбираем другие строки.
Причем мы берем не всю строку а с какими-то атрибутами - !:~0,3! и добавляем две переменные. Одна из них задает права [!$RIGHT].
Опять же не понятно, почему два %, что такое !, и т.д.
Вроде как бы одно подставляется в другое и так три раза, но например каким макаром в строку попадает перменная в который задано, что F - > полные. Для меня загадка.
Вот хоть убейте не разберусь
Я может не там смотрю (или не так ), но не нахожу информации

Отправлено: 15:59, 12-08-2009 | #5


Googler


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

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


"!$LINE:~-2,1!" - возвращает предпоследний символ "$LINE"
"!$LINE:~0,-2!" - возвращает "$LINE" без последних двух символов

цитата из справки ("SET /?"):
Цитата:
Можно также использовать строки расширения.

%PATH:~10,5%

расширит действие переменной среды PATH, затем использует только 5
символов, которые начинаются с 11-го символа (пропустив 10) расширенного
результата. Если длина не указана, по умолчанию используется оставшееся
значение переменной. Если оба значения (длина и число пропускаемых символов)
отрицательны, следующим используемым значением будет длина значения переменной
среды, добавленной к указанному значению пропуска или указанной длины.

%PATH:~-10%

извлечет последние 10 символов переменной PATH.

%PATH:~0,-2%

извлечет все символы переменной PATH, за исключением 2-х последних.
Аналогично и по остальному (не хочу воспроизводить справку)... кроме того, глянь линки:

CMD/BAT - [решено] Раскрытие имени файла во вложеном For
CMD/BAT - [решено] Реализация функций длины переменной, выделение подстроки с параметрами в переменной.
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:21, 12-08-2009 | #6



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Изменение текста в файле

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход