初めて自分の家と他人の家が違う、と意識した時

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

あるバッチファイルをダブルクリックすると
特定のファイル名のファイルを置き換えするような事がしたいのです

例えば
c:\aaa\test\a.ini
d:\test\a.ini
というファイルがあったとします
どのフォルダ階層にあるかはわからないのですが
testフォルダ以下にあるa.iniファイルを
a.bakというファイルにリネームして
バッチファイルのカレントに置いてあるa.iniファイルを
そのフォルダにコピーする
test\a.iniファイルがどこにも見つからなければ
該当ファイルが見つかりませんでしたので更新に失敗しました
というようなメッセージを出す
このようなプログラムをバッチファイルで作成する事は可能でしょうか?
バッチファイルの基本コマンドは知っているのですが
forとか高度な使い方はよくわからず教えて頂きたいのです
よろしくお願い致します

A 回答 (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%
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/09/08 08:27

このバッチで、バッチのあるディレクトリ以下から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

この回答への補足

c:\abc\a.ini ←ファイルの置き換えしない
c:\test\a.ini ←ファイルの置き換えする
c:\abc\test\a.ini ←ファイルの置き換えする

このようにtest直下にあるa.iniだけを置き換え対象にしたいのです

補足日時:2010/09/03 21:17
    • good
    • 0
この回答へのお礼

testディレクトリの下にあるa.iniだけを置き換え対象にしたい
この条件のところ以外のところは自分でも作る事ができました

testフォルダの下にあるa.iniという条件はどのように判別すればいいでしょうか?

お礼日時:2010/09/03 21:16

うる覚えです。

すみません。

IF EXIST ファイル名

DIR

ERRORLEVELで判定し検知、条件分岐したように思います。

メッセージはECHOかPAUSEを使う。


これらの検索をしてみてはどうでしょうか。
    • good
    • 0
この回答へのお礼

すいませんもうしこし具体的にやりたいことを質問しますと
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 (
ここで処理する
)

お礼日時:2010/09/03 15:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報