0

あるファイルの変数を使用して検索し、その変数の結果を取得して、別のファイルのテキストの一部を置き換えたいと思います。

「1.txt」の例として、ClassName=Xのテキスト行があります。

Xは、検索するテキスト行に応じてファイル内で変化します。ClassName=したがって、ClassName=の変数を使用して検索する必要があります。

次に、「Class =」という単語の後にある別のファイルでXを検索し、「ShipDummy」という単語に置き換えます。2番目のファイルを「2.txt」と呼びます。2番目のファイル内のXは、Class=Xのように見つかります。ただし、Class=ShipDummyにしたいと思います

1.txtのレイアウトと同様に検索しますが、「名前」の部分がなく、1.txtもShipDummyを取得しません。

また、交換が行われる前に2.txtのバックアップを作成したいと思います。

また、1.txtには多くのClassName =行があり、すべて異なるx値を持っています。x値ごとに変数を指定してから、2.txtでその値の置換を実行したいと思います。例:1.txtのClassName = x(2.txtのClass=xをClass=ShipDummyに置き換えます)

1.txtのClassName=y(2.txtのClass=yをClass=ShipDummyに置き換えます)

1.txtのClassName=z(2.txtのClass=zをClass=ShipDummyに置き換えます)

等々....

上記では、ここでは変数としてx、y、zを使用していることに注意してください。

どうすればこれをすべて行うことができますか?私はコーディングに不慣れで、非常に複雑です。これをバッチファイルでお願いします。

私が持っているのはこのようなものですが、私は失われています:

@echo off

SETLOCAL ENABLEDELAYEDEXPANSION

for /f "tokens=*" %%a in (1.txt) do 

SETLOCAL ENABLEDELAYEDEXPANSION

for /f "delims=" %%A in ("!var2!") do echo !var1:Name=%%A!

exit
4

1 に答える 1

0

おそらくこれを解決する最も簡単な方法は、逆方向からアプローチすることです。

2.txtの各行を読み取ります。行がテンプレートと一致する場合は、Xを解析し、1.txtClass=Xに存在するかどうかを検索しますClassName=X。存在する場合は置換行を書き込み、存在しない場合は元の行を書き込みます。

FINDSTRを使用して、ファイル内の文字列を検索できます。出力は気にしないので、出力はnullにリダイレクトされます。前の&&コマンド(FINDSTR)が成功した(一致した)場合、オペレーターは条件付きでコードを実行します。

@echo off
setlocal enableDelayedExpansion
>2.txt.new (
  for /f "delims=" %%A in (2.txt) do (
    set "ln=%%A"
    if "!ln:~0,6!" == "Class=" findstr /c:"ClassName=!ln:~6!" 1.txt >null && set "ln=Class=ShipDummy"
    echo !ln!
  )
)
move 2.txt.new 2.txt

上記のスクリプトはテストされていませんが、概念は機能するはずです。改善の余地はたくさんあります。

于 2013-02-21T03:35:24.960 に答える