###前提・実現したいこと
https://teratail.com/questions/105428
前回の質問以後新たな問題が発生しました。
複数ファイルの置換が全文二重記載または置換行しか記載されない問題です。
目標はファイルの置換に際し既存のファイルを置換箇所のみ上書きしたいです。
リダイレクトや、別名で出力など(以下で説明)試してはいますが成功しません。
なんとか、よりシンプルで最短距離な方法はないものでしょうか。
よろしくお願い致します。
###発生している問題・エラーメッセージ
case1: 現状では、conファイルの置換は成功しますが、同じ文章が二重に書かれます。(原因は特定済み。リダイレクトコマンド>>が追記の意味を持つから。)
case2: そこで>>を>に変更しました。
echo !line:ObjectTemplate.unlockLevel 0=ObjectTemplate.unlockLevel 1! > %%a
すると今度は置換した行以外が記入されていません。
case3: 次に、諦めて新規ファイルで書き出し旧ファイルを削除するという方法に切り替えました。
ここで問題は以下のコードの登場するタイミングです。
if exist %%a del %%a
このコードを第二のforの前に置くとcase2の二の舞(置換したい行のみ記載)になります。
また、かと言ってリダイレクトのあとに置くとcase1の二の舞(全文章の二重記載)になります。
###該当のソースコード
bat
1rem カレントディレクトリを取得 2cd %~dp0 3 4rem すべての.conファイルを回す 5for %%a in (*.con) do ( 6 rem 置換のためのおまじない。 7 setlocal ENABLEDELAYEDEXPANSION 8 for /f "delims=" %%b in (%%a) do ( 9 echo ----------%%a---------- 10 set line=%%b 11 echo !line:ObjectTemplate.unlockLevel 0=ObjectTemplate.unlockLevel 1! >> %%a 12 echo ----------end%%a---------- 13 ) 14 endlocal 15 ) 16 17pause
###試したこと
では、出力ファイル名を変えてみたら、、、と試みましたが、ここでも問題が。
このコードは終始ターゲットファイル=.conファイルの特定に参照変数(%%az/AZ)を使っているので以下%%aにどんな値を追記しても、拡張子部分しか変更されません。(出力ファイルが.con.texまたは.con.conファイル)
echo !line:ObjectTemplate.unlockLevel 0=ObjectTemplate.unlockLevel 1! >> %%a(addSomething)
しかし、この方法ならファイルは正しく置換されるのです。
ただ、bat動作後のフォルダがとても汚くなってしまうのが難点で、これでは自動化の意味がありません。
(例)%%a2の場合
aaa.con
aaa.con2
bbb.con
bbb.con2
ccc.con
ccc.con2
この場合以下のコードで全部消えてしまいます。
for %%b in (*.con) do ( del %%b )
###補足情報(言語/FW/ツール等のバージョンなど)
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/12/22 15:19
2017/12/22 21:50