2013-11-18 2 views
0

Пример ввода:Пакетный файл для поиска строку, а затем редактировать его

<document> 
<filename>Admin Training Manual.pdf</filename> 
<type>0</type> 
</document> 
<document> 
<filename>Document Manual.pdf</filename> 
<type>0</type> 
</document> 

Состояние: Если имя файла Руководство администратора = обучение, изменение типа к 1.

Выход:

<document> 
<filename>Admin Training Manual.pdf</filename> 
<type>1</type> 
</document> 
<document> 
<filename>Document Manual.pdf</filename> 
<type>0</type> 
</document> 

Я пробовал все в своем распоряжении и не мог найти ответа.

Я еще не пытался, но понятие есть:

if header = <document> (
    loop to count line inside <document> 
    if line is equal to 1 
    then check the string 
     if match 
     then replace line 2 with 1.  
) 
+0

Пожалуйста, [править], чтобы включить ваши лучшие попытки до сих пор у нас есть кое-что, чтобы начать с. – Edward

+2

Выполнение этого правильно в пакете довольно сложно. Можете ли вы полагаться на свой формат форматирования, и вам нужно проанализировать иерархию XML? * ie * достаточно ли предположить, что в каждой строке есть один тег? – paddy

+0

Я поместил свой алгоритм. Это действительно так? – user3006461

ответ

1
@ECHO OFF &SETLOCAL 
set "src=<filename>Admin Training Manual.pdf</filename>" 
(for /f "delims=" %%a in (file.xml) do (
    set "line=%%a" 
    SETLOCAL ENABLEDELAYEDEXPANSION 
    if "!line!"=="!src!" set "flag=true" 
    if not "!line:<type>=!"=="!line!" if defined flag (
     set "flag=" 
     set "line=<type>1</type>" 
    ) 
    echo(!line! 
    for /f %%b in ('set "flag" 2^>nul') do (if "!"=="" endlocal)&set "%%b" 
))>out.xml 
+0

Не тестировался и, может быть, я ошибаюсь, но 'endlocal' не отменяет назначение флага, поэтому он всегда не определен, когда' 'строка читается? Кроме того, нет необходимости в замедленном расширении в '! Src!' –

+0

Сценарий сделал вывод, но он не проверил корректно состояние, таким образом пропустив тег user3006461

+0

Что делает! перед линией! и! src! делать? – user3006461

1
@echo off 
setlocal EnableDelayedExpansion 

for /F "delims=:" %%a in ('findstr /N /C:"<filename>Admin Training Manual.pdf</filename>" input.txt') do set /A num=%%a+1 

(for /F "tokens=1* delims=:" %%a in ('findstr /N "^" input.txt') do (
    set "line=%%b" 
    if %%a equ %num% set "line=!line:0=1!" 
    echo !line! 
)) > output.txt 
Смежные вопросы