2011-11-10 1 views
3

これは問題があります。 このラインでの1つのバッチファイルがあります:文字列DIRの場所を置き換えるときにreplaceregexpを使用すると問題が発生する

集合TEST_DIR = C:\一時\のDIR1

は、私は私の中で使用するとき、私はちょうど、TEST_DIR

にいくつかの新しい値を設定したいが、 Antスクリプトは、それがスラッシュをエスケープし、この結果を与える:

集合TEST_DIR = C:homedir2

は代わりに、私はグラムにしたいですそれをアイブ:

集合TEST_DIR = C:\ホーム\のDIR2

私は、このコマンドを使用しています:

<replaceregexp file="${MT_BATCH_FILE_LOCATION}\myfile.bat" match="TEST_DIR=C:\\temp\\dir1" replace="TEST_DIR=C:\home\dir2" byline="true" /> 

答えて

5

私は別の簡単な解決方法を見つけましたreplaceregexpの代わりにを置き換えてください。

<replace file="${MT_BATCH_FILE_LOCATION}\myfile.bat" 
          token='TEST_DIR=C:\temp\dir1' 
        value='TEST_DIR=${new_loc}\home\dir2' /> 
+0

正規表現合併症をきれいに+1 – sudocode

+0

ありがとう:) – user1037728

5

をあなたはこれを使って、欲しい結果がパターンに置き換え得ることができます:

replace="TEST_DIR=C:\\\\home\\\\dir2" 

なぜなら、正規表現では一度、Javaでは一回だけバックスラッシュをエスケープしなければならないからです。バックスラッシュは両方のエスケープ文字ですntexts。コメント欄に、後続の質問への答えで

...

  1. 私は答えは同じになります期待しています。 ${new_loc}という値でバックスラッシュを二重エスケープする必要があります。つまり、C:\\\\my_projcodeではなくC:\my_projcodeを使用します。

  2. new_locは、環境変数として来ている場合は、値にバックスラッシュをエスケープするためにアリのcontribからpropertyregex taskを使用することができます。

    <project default="test"> 
    
        <!-- import ant-contrib --> 
        <taskdef resource="net/sf/antcontrib/antlib.xml"> 
        <classpath> 
         <pathelement location="C:/lib/ant-contrib/ant-contrib-1.0b3.jar"/> 
        </classpath> 
        </taskdef> 
    
        <target name="test"> 
    
        <!-- load environment variables --> 
        <property environment="env"/> 
    
        <!-- escape backslashes in new_loc --> 
        <propertyregex property="loc" input="${env.new_loc}" regexp="\\" replace="\\\\\\\\\\\\\\\\" /> 
    
        <echo message="env.new_loc: ${env.new_loc}"/> 
        <echo message="loc: ${loc}"/> 
    
        <!-- do the replace --> 
        <replaceregexp file="test.bat" match="TEST_DIR=C:\\temp\\dir1" replace="TEST_DIR=${loc}\\\\home\\\\dir2" byline="true" /> 
    
        </target> 
    

出力:

c:\tmp\ant>set new_loc=c:\foo\bar 

c:\tmp\ant>ant 
Buildfile: c:\tmp\ant\build.xml 

test: 
    [echo] new_loc: c:\foo\bar 
    [echo] env.new_loc: c:\foo\bar 
    [echo] loc: c:\\\\foo\\\\bar 

BUILD SUCCESSFUL 
Total time: 0 seconds 

c:\tmp\ant>type test.bat 
set TEST_DIR=c:\foo\bar\home\dir2 
+0

ちょっと私の問題は、実際に元に建てられた....部分的に解決してしまったwell..butそれは私が私の新しい場所に追加するワンドも一つの変数を持って働いていた...ここで私が使用しているコードがあります.. – user1037728

+0
+0

とその与える結果... TEST_DIR = C:my_projcode \ home \ dir2 C:とmy_projcodeの間にスラッシュはまだ見当たりません。 – user1037728

関連する問題