• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:バッチファイルでファイルを置換)

バッチファイルでファイル置換

このQ&Aのポイント
  • バッチファイルを使用して指定したフォルダ以下の特定のファイルを置換する方法について解説します。
  • フォルダ内のa.iniファイルをa.bakにリネームし、バッチファイルのカレントにあるa.iniファイルをそのフォルダにコピーする方法を説明します。
  • 見つからない場合には更新に失敗した旨のメッセージを表示します。バッチファイルで作成することが可能です。

質問者が選んだベストアンサー

  • ベストアンサー
  • pita-gora
  • ベストアンサー率70% (102/145)
回答No.3

以下のサンプルはCドライブのルートディレクトリ(C:\)からtest\a.iniに該当するファイルを探して、 カレントディレクトリのa.iniに置き換えるものです。 :----------------------------------- sample.bat echo off set msg=該当ファイルが見つかりませんでしたので更新に失敗しました for /d /r C:\ %%d in ( test* ) do ( if /I "%%~nxd"=="test" if exist "%%d\a.ini" ( if exist "%%d\a.bak" del "%%d\a.bak" ren "%%d\a.ini" a.bak copy .\a.ini "%%d" set msg=更新しました ) ) echo. echo %msg%

m0711
質問者

お礼

目的のことができました バッチファイルではそこまで高度な事できないと あきらめかけていましたが できるんですね 勉強になりました

その他の回答 (2)

  • Yorisin
  • ベストアンサー率54% (364/663)
回答No.2

このバッチで、バッチのあるディレクトリ以下からa.iniを探し、 見つけたらバッチの場所にコピーをして、元のa.iniをa.bakにリネームできると思います。 ※ 複数見つけた場合には上書きを確認する ======== @echo off rem 変数設定 :SET set first=a.ini set second=a.bak rem ファイル名検索再帰処理 :SEARCH for /r %%a in (*) do ((set fullpath="%%a") & (set filename=%%~xna))&& (call :NAMECHK) goto SECEXIT rem ファイル名存在確認 :NAMECHK if %filename%==%first% goto COPURENAME goto :eof rem コピー&リネーム処理 :COPURENAME echo %fullpath% copy %fullpath% /-Y ren %fullpath% %second% goto :eof rem 変数開放 :SECEXIT set filename= set first= set second= pause ======== 参考: ここを参考にしました。 http://bat-file.seesaa.net/article/44567923.html

m0711
質問者

お礼

testディレクトリの下にあるa.iniだけを置き換え対象にしたい この条件のところ以外のところは自分でも作る事ができました testフォルダの下にあるa.iniという条件はどのように判別すればいいでしょうか?

m0711
質問者

補足

c:\abc\a.ini ←ファイルの置き換えしない c:\test\a.ini ←ファイルの置き換えする c:\abc\test\a.ini ←ファイルの置き換えする このようにtest直下にあるa.iniだけを置き換え対象にしたいのです

  • layy
  • ベストアンサー率23% (292/1222)
回答No.1

うる覚えです。すみません。 IF EXIST ファイル名 か DIR ERRORLEVELで判定し検知、条件分岐したように思います。 メッセージはECHOかPAUSEを使う。 これらの検索をしてみてはどうでしょうか。

m0711
質問者

お礼

すいませんもうしこし具体的にやりたいことを質問しますと for /r c:\ %%a in (a.ini) do ( ここでファイル置き換え処理を記述 ) このようにするとc:\のサブディレクトリ以下全てのファイルを置換する事が できるのですが 今回対象としたいのは test\a.ini のようにtestディレクトリの下にあるa.iniだけを置き換え対象にしたいのです 以下のように書いてみたのですが うまくいかなかったので・・・ for /r c:\ %%a in (test/a.ini) do ( ここで処理する ) for /r c:\ %%a in (*test/a.ini) do ( ここで処理する ) for /r c:\ %%a in (*/test/a.ini) do ( ここで処理する )

関連するQ&A