2016-04-07 24 views
0

Belirli bir metni aradığım ve başka biriyle değiştirmek istediğim bir dosyam var. Örneğin:Tüm satırı değiştir cmd

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

Buradaki sorun <role-name> etiket içindeki diğer sonra metin "test" olabileceğini olacaktır:

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

bu ben ile değiştirmek istediğini örneğin içindir.

Bütün satırı nasıl bulabilirim ve ihtiyacım olan metni nasıl değiştirebilirim?

Veya belki de etiketinin satır numarasını almak ve bütün yerini ama yine nasıl dış kodu olmadan bunu o :-)

+0

çek [burada] (http://stackoverflow.com/a/32757504/388389) – npocmaka

+0

@npocmaka thx: Bu herkes ihtiyacı varsa, dosyadan okur ve gerekli kodu yazar benim kodudur ama harici dosyaları kullanamıyorum ve ayrıca benim asıl problemim de etiketler arasındaki dizenin farklı olabileceğidir. Yani yapmak istediğim, 'u aramaktır ve bulduğum yeri, tüm satırı başka bir dizeyle değiştirmeliyim. – Sebastian

+0

@Mofi bu bir kopya değildir çünkü bu soruda tam olarak değiştirilmesi gereken dizeyi biliyordu. Benim durumumda, tüm çizgiyi kısmi bir dizgeye göre değiştirmek zorunda kaldım. – Sebastian

cevap

0

Sorun, bir dosyadan okuduğum ve karşılaştırmak istediğim dizenin bir döngü içinde geldiğiydi.

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

anahtar yapmaya dizge ikame kullanıyor hiçbir fikrim yok olabilir ifadesi. Etiket ve değer dizelerini parametrelemek istediğinizi varsayalım. Bu ayrıca herhangi bir yeni satır karakterine sahip olmayan diziye de bağlı olacaktır.

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

cevabınız için teşekkürler ama FromVal değişken nedeniyle benim durumumda çalışmıyor. "Test" veya "test1" veya başka bir şey içerebilir. Bütün satırı gibi bir şeyle değiştirmeliyim. Bu yarasa dosyasını maven ile bir paket oluşturmak için bir otomasyon olarak kullanmak istiyorum ve paketi her kurduğumda düzenlemek istemiyorum. – Sebastian

+0

Tamam, şimdi değiştirilecek etiket ve değer, komut satırından alınır. Parametrelerin verildiği konusunda gerçekten bir doğrulama olmalı. Bu okuyucuya bir egzersiz olarak bırakılır. Bu senin için çalışacak mı? – lit

+0

Korkarım ne demek istediğini anlamadım. Mesele şu ki, o etikete hangi değerin girileceğini biliyorum, ama değiştirmeden önce hangi değerin olduğunu bilmiyorum. Örneğin, uygulamayı ilk kez oluşturduğumda etiket boş olmalıdır () ancak ikinci derlemede "test" veya "int" etiketlerine sahip olabilirdim ve "prod" ile değiştirmek istiyorum. Teşekkür ederim :-) – Sebastian