2016-04-07 2 views
0

У меня есть файл, где я ищу конкретный текст и хочу заменить его на другой. Например:Заменить всю строку cmd

<role-name>test</role-name> 

это, например, что я хочу, чтобы заменить его:

<role-name>file</role-name> 

Проблема здесь будет то, что в <role-name> тега может быть другой текст, затем «тест».

Как найти всю строку и заменить ее текстом, который мне нужен?

Или, может быть, я могу получить номер строки тега и заменить его целиком, но опять же я понятия не имею, как это сделать :-)

+0

чек [здесь] (http://stackoverflow.com/a/32757504/388389) – npocmaka

+0

@npocmaka ТНХ но я не могу использовать внешние файлы, а также моя основная проблема заключается в том, что строка между тегами может отличаться. Итак, что я хочу сделать, это поиск , и там, где я его нашел, я должен заменить всю строку другой строкой. – Sebastian

+0

@Mofi это не дубликат, потому что в этом вопросе он точно знал строку, которую нужно было заменить. В моем случае мне пришлось заменить всю строку на основе частичной строки. – Sebastian

ответ

0

Проблема была в том, что я читал из файла, а строка, которую я хотел сравнить, приходила в цикл for. Это мой код, который считывает из файла и записывает код, мне нужно, если кто-то нуждается в нем:

set "nameofapp=%<display-name>" 
set "nameofapp_country=% <display-name>ASD</display-name>" 
set "rolename=%<role-name>" 
set "rolename_country=%    <role-name>ASD-role</role-name>" 
set "propertiesfile=%<env-entry-value>" 
set "properties_file=%  <env-entry-value>java-asd.properties</env-entry-value>" 
set "web=src\main\webapp\WEB-INF\web.xml" 
set "web_1=web.xml" 

(for /f "delims=" %%i in (%web%) do (
    set "line=%%i" 
    setlocal enabledelayedexpansion 

    set "name=!line:%nameofapp%=%!" 
    if not !name! == !line! (
     set "line=%nameofapp_country%" 
    ) 

    set "role=!line:%rolename%=%!" 
    if not !role! == !line! (
     set "line=%rolename_country%" 
    ) 

    set "property=!line:%propertiesfile%=%!" 
    if not !property! == !line! (
     set "line=%properties_file%" 
    ) 
    echo(!line! 
    endlocal 
))>"%web_1%" 
del %web% 
Move %web_1% "src\main\webapp\WEB-INF\" 
0

Ключ к делать это без внешнего кода с помощью подстановки строк выражение. Я предполагаю, что вы хотите параметризовать теги и значения строк. Это также будет зависеть от последовательности, не имеющей символов новой строки.

C:>type seb.bat 
@ECHO OFF 
SETLOCAL ENABLEDELAYEDEXPANSION 
SET EXITCODE=0 

SET "TAG=%~1" 
SET "FROMVAL=%~2" 
SET "TOVAL=%~3" 

FOR /F "usebackq tokens=*" %%a IN (`TYPE "seb.html"`) DO (

    echo %%a 

    SET S1=%%a 
    SET S2=!S1:^<%TAG%^>%FROMVAL%^</%TAG%^>=^<%TAG%^>%TOVAL%^</%TAG%^>! 
    ECHO !S2! 
) 

EXIT /B %EXITCODE% 

C:>type seb.html 
<role-name>test</role-name> 

C:>seb role-name test file 
<role-name>test</role-name> 
<role-name>file</role-name> 
<role-name></role-name> 
<role-name></role-name> 

C:>seb role-name test "" 
<role-name>test</role-name> 
<role-name></role-name> 
<role-name></role-name> 
<role-name></role-name> 

C:>seb role-name "" "file" 
<role-name>test</role-name> 
<role-name>test</role-name> 
<role-name></role-name> 
<role-name>file</role-name> 
+0

благодарю вас за ответ, но он не работает в моем случае из-за переменной FromVal. Он может содержать «тест» или «тест1» или что-то еще. Я должен заменить всю строку новой строкой somethingelse. Этот файл bat я хочу использовать его как автоматизацию для сборки пакета с maven, и я не хочу его редактировать каждый раз, когда я создаю пакет. – Sebastian

+0

Итак, теперь тег и значение, которые нужно заменить, взяты из командной строки. Там действительно должно быть некоторое подтверждение того, что параметры указаны. Это остается как упражнение для читателя. Будет ли это работать на вас? – lit

+0

Боюсь, что я не понял, что вы имели в виду. Дело в том, что я знаю, какое значение следует добавить в этот тег, но я не знаю, какое значение перед тем, как я его заменил. Например, когда я создаю приложение в первый раз, тег должен быть пустым (), но во второй сборке я мог бы иметь в теге «test» или «int», и я хочу заменить его «prod». Спасибо :-) – Sebastian

Смежные вопросы