- ベストアンサー
バッチファイルでファイル置換
- バッチファイルを使用して指定したフォルダ以下の特定のファイルを置換する方法について解説します。
- フォルダ内のa.iniファイルをa.bakにリネームし、バッチファイルのカレントにあるa.iniファイルをそのフォルダにコピーする方法を説明します。
- 見つからない場合には更新に失敗した旨のメッセージを表示します。バッチファイルで作成することが可能です。
- みんなの回答 (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%
その他の回答 (2)
- Yorisin
- ベストアンサー率54% (364/663)
このバッチで、バッチのあるディレクトリ以下から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
お礼
testディレクトリの下にあるa.iniだけを置き換え対象にしたい この条件のところ以外のところは自分でも作る事ができました testフォルダの下にあるa.iniという条件はどのように判別すればいいでしょうか?
補足
c:\abc\a.ini ←ファイルの置き換えしない c:\test\a.ini ←ファイルの置き換えする c:\abc\test\a.ini ←ファイルの置き換えする このようにtest直下にあるa.iniだけを置き換え対象にしたいのです
- layy
- ベストアンサー率23% (292/1222)
うる覚えです。すみません。 IF EXIST ファイル名 か DIR ERRORLEVELで判定し検知、条件分岐したように思います。 メッセージはECHOかPAUSEを使う。 これらの検索をしてみてはどうでしょうか。
お礼
すいませんもうしこし具体的にやりたいことを質問しますと 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 ( ここで処理する )
お礼
目的のことができました バッチファイルではそこまで高度な事できないと あきらめかけていましたが できるんですね 勉強になりました