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

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

Ответить
Настройки темы
CMD/BAT - Удалить в заданных файлах кусок кода

Новый участник


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

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


Приветствую всех профи. Может ли кто-нибудь оказать посильную помощь:

Требуется:
- задать список файлов, в котором будет производиться поиск;
- задать список переменных name.

Программа находит блок кода с указанной переменной name и удаляет весь блок кода.

Пример трех блоков кода:
Код: Выделить весь код
[1846]
; cse_abstract properties
section_name = climable_object
name = clmbl#0
position = -106.643463134766,-2.1507089138031,-143.208633422852
direction = 9.43627092055976e-005,3.14159274101257,-1.57082176208496

; cse_alife_object properties
game_vertex_id = 703
distance = 0
level_vertex_id = 172
object_flags = 0xffffffbf

; cse_shape properties
shapes = shape0
shape0:type = box
shape0:axis_x = 1.38665246963501,0,0
shape0:axis_y = 0,0.363929748535156,0
shape0:axis_z = 0,0,0.00012969970703125
shape0:offset = 0,0,0

[1857]
; cse_abstract properties
section_name = lights_hanging_lamp
name = lights_gi_r2_blue_0004
position = -71.9155960083008,-0.432599604129791,-134.792053222656
direction = 0,0,0

; cse_alife_object properties
game_vertex_id = 703
distance = 0
level_vertex_id = 172
object_flags = 0xffffffba
custom_data = <<END
[collide]
ignore_static
END

; cse_visual properties

; cse_ph_skeleton properties

; cse_alife_object_hanging_lamp properties
main_color = 0xff78879d
main_brightness = 0.100000001490116
main_color_animator = light\omni_01
main_range = 4.5
light_flags = 0x8
health = 100
main_virtual_size = 0.100000001490116
ambient_radius = 2
ambient_power = 0.100000001490116
main_cone_angle = 2.09439516067505
glow_radius = 0.699999988079071

[2518]
; cse_abstract properties
section_name = space_restrictor
name = val_farm_zone
position = -136.152282714844,0.170738220214844,-504.968627929688
direction = 0,0,0

; cse_alife_object properties
game_vertex_id = 811
distance = 0
level_vertex_id = 316473
object_flags = 0xffffff3e
story_id = 435

; cse_shape properties
shapes = shape0
shape0:type = sphere
shape0:offset = 0,0,0
shape0:radius = 9.46899890899658

; cse_alife_space_restrictor properties
restrictor_type = 3
Например. Если задать программе удалить блок со значением name = val_farm_zone, она должна удалить весь этот блок:
Код: Выделить весь код
[2518]
; cse_abstract properties
section_name = space_restrictor
name = val_farm_zone
position = -136.152282714844,0.170738220214844,-504.968627929688
direction = 0,0,0

; cse_alife_object properties
game_vertex_id = 811
distance = 0
level_vertex_id = 316473
object_flags = 0xffffff3e
story_id = 435

; cse_shape properties
shapes = shape0
shape0:type = sphere
shape0:offset = 0,0,0
shape0:radius = 9.46899890899658

; cse_alife_space_restrictor properties
restrictor_type = 3
Заранее благодарю.

Отправлено: 11:58, 14-10-2013

 

Ветеран


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

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


Батник:
читать дальше »

Код: Выделить весь код
@echo off
setlocal

set "list=1.ini 2.ini"
set "search=val_farm_zone"

for %%i in (%list%) do call:parse "%%i"
for /f "tokens=2 delims==" %%i in ('set file_') do echo program.exe %%i
goto:eof

:parse
set file=%~1

for /f "tokens=*" %%i in (%file%) do (

    1>nul 2>&1 (
    
        echo %%i| findstr "^\[.*\]$" && set "section=%%i"
        if "%%i"=="name = %search%" call:set
        
    )

)

goto:eof

:set
set /a cnt+=1
set "file_%cnt%=%file% %section%"

Powershell:
читать дальше »

Код: Выделить весь код
$list = '1.ini', '2.ini'
$value = 'val_farm_zone'

$files = @{}

foreach ($file in $list) {

    switch -regex (( gc $file )) {

    "\[.*\]"         { $sec = $_ }
    "^name = $value" { $files."$file" += $sec } 

    }

}

$files.keys | % { 

    $f = $_ 
    $s = $files."$_"
    
    write-host "& program.exe $f $s"


}

ЗЫ. А внешняя программа только удаляет определенные секции? Просто это можно сделать прямо из скрипта Powershell.

Последний раз редактировалось Foreigner, 14-10-2013 в 21:33.

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:21, 14-10-2013 | #2



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

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


Новый участник


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

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


Извиняюсь, что не совсем ясно изъяснился, но внешней программы нет. Я имел ввиду, что в батнике (или Powershell) нужно задать список файлов и список переменных name и при запуске этого самого батника он должен находить блоки кода, которые содержат указанные переменные и удалять их. Сможете подправить свои батник и Powershell? Спасибо.

Последний раз редактировалось mrkane, 15-10-2013 в 09:17.


Отправлено: 08:51, 15-10-2013 | #3


Ветеран


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

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


PowerShell:
Код: Выделить весь код
$list = '1.ini', '2.ini'       # список файлов
$value = 'val_farm_zone'       # Значение параметра name, секцию с ним надо удалить

foreach ( $file in $list ) { 

    $sections = @()
    switch -regex ( gc $file ) {
    
        "\[.*\]" { $sections += $sec; $sec = @($_) }
        default  { 
        
            if ( $_ -match "^name\s=\s$value$" ) { $sec = $null }
            elseif ( $sec ) { $sec += $_ }
    
    }}
    
    $sections | sc $file

}
Лучше проверить на тестовых файлах

Последний раз редактировалось Foreigner, 18-10-2013 в 19:37.


Отправлено: 19:29, 18-10-2013 | #4



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
PowerShell - [решено] Вывод заданных свойств процесса kelevara Скриптовые языки администрирования Windows 7 08-05-2013 16:42
CMD/BAT - Расскажите как работает данный кусок кода(регулярные выражения) элькхар Скриптовые языки администрирования Windows 4 24-10-2012 22:04
CMD/BAT - Удалить определенные строки в текстовых файлах Seryoga204 Скриптовые языки администрирования Windows 0 05-08-2012 14:53
VBS/WSH/JS - [решено] Нужно быстро (!) удалить пустые строки во всех txt-файлах из одной директории andreton Скриптовые языки администрирования Windows 10 08-06-2010 03:39
CMD/BAT - [решено] Вывод заданных параметров storm2005 Скриптовые языки администрирования Windows 1 08-01-2010 10:34




 
Переход