2011-11-10 54 views
3

我在做這件事時遇到了麻煩。 存在與該行1個批處理文件:更換字符串DIR位置時使用replaceregexp時出現問題

集TEST_DIR = C:\ TEMP \ DIR1

我只是想設置一些新的價值TEST_DIR

但是,當我在用我的ant腳本,它避開了正斜槓並給出了這樣的結果:

集TEST_DIR = C:homedir2

相反,我要到g香港專業教育學院是:

集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即將在爲環境變量,你可以使用propertyregex task從螞蟻的contrib逃避反斜槓值:

    <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

相關問題