2017-01-31 8 views
1

私はclient.propsという名前の既存のファイルを持っていますので、ドキュメントを読み込んでroot=を見つけてroot=path_of_fileに置き換えるバッチスクリプトを作成する必要があります。私は以下のスクリプトを使用しました:バッチスクリプトを使用してファイル内のテキストを見つけて置き換える方法

@echo off 
setlocal enableextensions disabledelayedexpansion 
set "search=root=" 
set "replace=root=%~dp0" 
set "textFile=client.props" 
set "textFile1=client1.props" 

for /f "delims=" %%i in ('type "%textFile%" ^& break ^> "%textFile1%" ') do 
(
    set "line=%%i" 
    setlocal enabledelayedexpansion 
    set "line=!line:%search%=%replace%!" 
    >>"%textFile1%" echo(!line! 
    endlocal 
) 

私はバッチスクリプトでそれほど役に立ちません。親切に私を助けてください。ファイルがF:\temp\file\client.propsで利用可能で、行の1つがroot=で始まっている場合、バッチはroot=F:\temp\fileと変更する必要があります。ため=符号は、サブ文字列置換構文!line:%search%=%replace%!内で使用することができない

root=F:\temp\file 
+0

'do'の後に 'do'は 'do 'と同じ行になければなりません! – aschipfl

答えて

0

:後

root= 

:前

=は検索文字列と置換文字列を区切ります。でもありませんあなたが見ることができるように

@echo off 
setlocal enableextensions disabledelayedexpansion 
set "search=root=" 
set "replace=root=%~dp0" 
set "textFile=client.props" 
set "textFile1=client1.props" 

for /f "delims=" %%i in ('type "%textFile%" ^& break ^> "%textFile1%" ') do (
    >>"%textFile1%" (
     for /f "tokens=1,* delims==" %%a in ("%%i") do (
      if /i "%%a="=="%search%" (
       if "%%b"=="" (
        echo(%replace% 
       ) else (
        echo(%%i 
       ) 
      ) else (
       echo(%%i 
      ) 
     ) 
    ) 
) 

:それは=文字ですべての行を分割し、rootに対して左部分と空の状態に対して正しいものをチェックするように

はあなたのfor /Fループを変更することができます遅延拡張が必要。ただし、先頭の区切り文字は無視され、その後の区切り文字は1として扱われるため、=root==のような行があると、この方法は失敗します。大文字と小文字を区別する検索文字列の比較を行うには、ifコマンドラインから/iオプションを削除します。

置き換えられた行は、たとえばroot=F:\temp\file\のように\で終了することに注意してください。

+0

は、テキストを含む行を完全に削除する/ワイルドカード検索で始まり、独自の行を作成します –

+0

'root ='を含んでいる、あるいは 'root ='で始まっている行を削除することを意味していますか? 'if/i not not about" %% a "=="%search% "echo(% – aschipfl

関連する問題