2016-04-07 11 views
0

私は特定のテキストを検索し、別のテキストと置き換えたいファイルがあります。たとえば:行全体を置換するcmd

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

ここでの問題は<role-name>タグ内の他、テキスト「テスト」であるかもしれないということでしょう:

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

これは私がそれを交換したいもの、たとえばです。

行全体を見つけて、必要なテキストに置き換えるにはどうすればよいですか?

それとも私が外部コードなしでこれを行うための鍵は、文字列置換を使用している:-)

+0

チェック[ここ](http://stackoverflow.com/a/32757504/388389) – npocmaka

+0

@npocmakaのTHXしかし、私は外部ファイルを使用することはできませんまた、私の主な問題は、タグ間の文字列が異なる可能性があります。だから私がしたいのは、を検索することです。私はそれを見つけたので、行全体を別の文字列に置き換える必要があります。 – 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に置き換える必要があります。このバットファイルは、mavenを使ってパッケージをビルドするためにオートメーションとして使用したいので、パッケージをビルドするたびに編集したくありません。 – Sebastian

+0

これで、置き換えられるタグと値はコマンドラインから取得されます。実際には、パラメータが与えられていることを確認する必要があります。それは読者の練習として残されています。これはあなたのために働くでしょうか? – lit

+0

私はあなたが何を意味するのか分からなかったことを恐れています。そのタグに入れる値はわかっていますが、置き換える前の値はわかりません。たとえば、初めてアプリケーションをビルドするときには、タグは空()でなければなりませんが、2番目のビルドでは "test"または "int"というタグを持つことができ、 "prod"と置き換えます。ありがとうございます:-) – Sebastian

関連する問題