2017-01-09 15 views
0

私はバッチスクリプトの経験があまりなく、私の雇用主はディレクトリ内のすべての一致するファイル内のテキストを見つけて置き換えるためのバッチスクリプト。複数のファイルの特定の文字列を置き換えるバッチスクリプト

私はこれを探してみたと私はこれまでのところ、私を取得するために使用されてきた資源のトンが、あります:

@echo off 
    setlocal enableextensions disabledelayedexpansion 

    set "search=<employeeloginid>0" 
    set "replace=<employeeloginid>" 

    set "textFile=TimeTEQ20170103T085714L.XML" 

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

これは<employeeloginid>0のすべての出現を検索し、内部<employeeloginid>と交換しますファイルを設定 - この場合はTimeTEQ20170103T085714L.XMLです。

私は今、私はディレクトリ内のすべてのファイルを実行する方法を示し this answerを見つけ .xml

TimeTEQエンドで始まるすべてのファイル上で実行するために、これを微調整する必要があるが、私はしないでください

私のニーズに合わせて調整する方法を知っています。

誰でも教えてください。

+0

アドバイス。バッチを使用する必要がない場合は、あなたの人生を楽にしてください - スクリプト言語を使用してください。私はPythonを好むでしょうが、好きなものを選ぶことができます。複数のファイル内容の解析が可能ですが、バッチで行うのが悪いことです。 – Drako

+0

@Drakoこれも私の直感的な考えでしたが、クライアントに行く必要があり、バッチファイルとして要求されるため、要件です。 – James

答えて

1

単純にこのように、標準for loopを包み込む:

@echo off 
setlocal EnableExtensions DisableDelayedExpansion 

set "search=<employeeloginid>0" 
set "replace=<employeeloginid>" 

set "textFile=TimeTEQ*.xml" 
set "rootDir=." 

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

endlocal 

あなたはサブフォルダにも一致するファイルを処理したい場合は、for /R loopを使用します。

@echo off 
setlocal EnableExtensions DisableDelayedExpansion 

set "search=<employeeloginid>0" 
set "replace=<employeeloginid>" 

set "textFile=TimeTEQ*.xml" 
set "rootDir=." 

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

endlocal 
1

あなたはこのようなあなたのパターンに一致するディレクトリ内のすべてのファイルを通過する別のもので、現在ましループ囲むことができます。

for /f "delims=" %%n in ('dir /b ^| findstr /r "TIMETEQ.*\.xml') do (

をしてまで、あなたの電流ループのヘッダーを変更:

for /f "delims=" %%i in ('type "%%~n" ^& break ^> "%%~n" ') do (

>>"%textFile%" echo(!line!総新しいSCでそう

>>"%%~n" echo(!line! 

へRIPTは次のようになります。

@echo off 
    setlocal enableextensions disabledelayedexpansion 

    set "search=<employeeloginid>0" 
    set "replace=<employeeloginid>" 

    set "textFile=TimeTEQ20170103T085714L.XML" 

    for /f "delims=" %%n in ('dir /a-d /b ^| findstr /r "TIMETEQ.*\.xml') do (

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

説明:

新たな付加外側のループ自体が/bdirコマンドの出力を超える正規表現検索の結果が含まれているコマンドdir /b ^| findstr /r "TIMETEQ.*\.xmlの出力を通過ファイル名のみを表示するように切り替わり、/a-dは、検索からディレクトリを除外します。

次に、%filename%をループのパラメータ - >%%~n~と変更して、周囲の二重引用符を削除しました。

関連する問題