3

ファイルの内容を変更できるバッチ ファイルを作成する必要があります。

例えば

Testing.txt ファイルには、Description=MAN_Human の行が含まれており、Description=MAN_Human_V2 に変更されています。

MAN の末尾に (_V2) のみを追加します。

したがって、ファイルを開くと、MAN のみの代わりに MAN_Human_V2 という記述名が表示されます。

作業するファイルが複数あります。助けてください。

4

2 に答える 2

4

ループを使用しforてファイルの各行を移動し、「説明」のある行を見つけたら、出力に「_V2」を追加します。

@echo off

for %%f in (*.txt) do (
  for /f "tokens=1* delims=:" %%g in ('type "%%f" ^| findstr /n /v "BoGuSsTrInG"') do (
    if "%%hx"=="x" (
      echo.>>"%%~nf.newtxt"
    ) else (
      for /f "tokens=1* delims==" %%i in ('echo.%%h') do (
        if "%%i"=="Description" (
          echo.%%i=%%j_V2>>"%%~nf.newtxt"
        ) else (
          if "%%jx"=="x" (
            echo.%%i>>"%%~nf.newtxt"
          ) else (
            echo.%%i=%%j>>"%%~nf.newtxt"
          )
        )
      )
    )
  )
)

ren *.txt *.oldtxt
ren *.newtxt *.txt

もちろん、test.txtファイルの処理中にコンテンツを新しいファイルに出力する必要があります。次に、元のファイルを新しく作成したファイルに置き換えます...

編集#1

TXT ファイルの名前を元の名前に戻す前に、TXT ファイルの内容を新しいファイルに完全にコピーする必要があります。これは、forすぐに名前を変更すると、変更後にループがそれらを再び取得し、一部の名前が_V2何度も​​追加されるためです。

最後にファイルを削除しません.oldtxtでした。プロセスが機能したことを確認するまで、元のファイルを破棄してはならないからです。

編集#2

空白行を保持する回避策が 1 つあります。回避策は、テキスト ファイルの内容を にパイプし、findstrを含まないすべての行を検索しますBoGuSsTrInG。出力には行番号が含まれます (空白行を印刷する唯一の方法です)。行番号には末尾のコロン ( :) があるため、出力をコロンの内容を分割するさまざまな変数に分割できます。tokens=1*行番号を変数に分割し、行の%%g結果を%%h変数に入れます。空かどうかをテスト%%hして、新しいファイルに空白行を追加できます。それ以外の場合は、以前と同様に処理%%hします。

于 2013-06-28T20:54:18.953 に答える
1

ダウンロードできますsed(UNIXユーティリティ- google sed windows

sed -i 's/Description=MAN_Human/Description=MAN_Human_V2/' test.txt

-iつまり、結果を (画面に表示する代わりに) 同じファイルに書き戻します。2 番目のパラメーターはs、substitute ... to ... を示し、残りはこれを実行するファイル (のリスト) です。man sed詳しくはグーグル

于 2013-06-28T20:13:18.957 に答える