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

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

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

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

  • m0711
  • お礼率59% (84/141)

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

  • ベストアンサー
  • 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

  • バッチファイル

    お世話になります。 バッチファイルを用いて、実行されるプログラムがあります。 私の作成したものではないので、どのようなやり取りが内部で行われているのかは、詳細はわかりません。 例えば、D:\Programフォルダーの中にプルグラムをインストールしたとすれば、引数を2つ指定して(例:aaaとbbb)、バッチファイル(test.bat)を以下のように実行すれば、プログラムは正常に作動します。 D:\Program>test aaa bbb しかし、以下の場合には、正常に作動しません。 C:\>D:\Program>test aaa bbb つまり、パスを含めて、バッチファイルを実行することは、このプログラムは許可してくれません。 ここで、例えば、VBなどを用いて、テキストボックスなどで引数を二つ指定して、実行ボタンをクリックすれば、必ず、D:\Program>test aaa bbbという状態で、バッチファイルが実行されるようにするには、どのようにすればよろしいでしょうか? もしご存知の方がいらっしゃいましたら、是非、ご教授願います。 以上、宜しくお願いいたします。

  • バッチファイルでファイル名をリネームのコマンド

    お世話になります。 バッチファイルのコマンドについて質問させていただきます。 【やりたいこと】 AAA.batというバッチファイルと”MU_日付.txt”というテキストがあります。 このテキストの日付部分は毎回変わります。例)MU_111226.txt このバッチファイルとMU_日付.txtは同じ階層にあります。 まず、このAAA.batをクリックしたら、この”MU_111226.txt” を ”読み込み.txt” という名前にリネームします。このリネーム処理の時、テキスト名が”MU”で始まるファイル以外は対象にしないようにしたいのです。 次にある処理を行って、その処理が済んだら”読み込み.txt”を”END_MU_111226.txt”といった元のファイル名に”END_”を付けた形でリネームして、同じ階層にある「処理済み」フォルダへ移動させたいのです。 ”END_” + ”元のファイル名”が無理であれば、”MU_111226.txt”を「処理済み」フォルダへ移動させるだけでも構いません。 このような処理は可能でしょうか? どなたかご教授いただけますでしょうか。よろしくお願い致します。

  • バッチでファイルをリネームして別フォルダ移動に行き詰まり・・・

    バッチ(コマンドプロンプト)でファイルをリネームして別フォルダに移したいのですが行き詰ってしまったのでどなたかご教示ください。当方XPの環境です。 まず、今日(例:2月4日時点で)簡単に説明するとあるフォルダに3つファイルが存在します。 「test1」フォルダに「AAA200711.txt」「AAA200712.txt」「AAA200801.txt」があるとします。 数字はその月に作ったファイルと思ってください。 そのファイルを「test2」フォルダへ移したいと思っています。 移す際にファイル名をリネームしたいと思います。 2008年1月のものを「AAA1.txt」2007年12月のファイルを「AAA2.txt」といった感じでやるつもりです。 当方で考えた下記の構文でですが先月、先々月のものはうまくリネームしてコピーされました。 ですが3ヶ月前のファイルだけなぜか出来ません。 下記にあるのはそのまんまコピーしたものになります。 原因がわからず戸惑っておりますのでよろしくお願いします。 @echo off set YYYYMM=%DATE:~-10,4%%DATE:~-5,2% set /a LASTMONTH=YYYYMM-1 if %LASTMONTH:~-2%==00 set /a LASTMONTH+=12-100 copy C:\test1\AAA%LASTMONTH%.txt C:\test2\AAA1.txt @echo off set YYYYMM=%DATE:~-10,4%%DATE:~-5,2% set /a TWOMONTHAGO=YYYYMM-2 if %TWOMONTHAGO:~-2%==00 set /a TWOMONTHAGO+=12-100 copy C:\test1\AAA%TWOMONTHAGO%.txt C:\test2\AAA2.txt @echo off set YYYYMM=%DATE:~-10,4%%DATE:~-5,2% set /a THREEMONTHAGO=YYYYMM-3 if %THREEMONTHAGO:~-2%==00 set /a THREEMONTHAGO+=12-100 copy C:\test1\AAA%THREEMONTHAGO%.txt C:\test2\AAA3.txt ↑これがうまくいかないのです。 日付の計算とかが間違っているのでしょうか? cd /d C:\test2 del AAA*.txt

  • バッチファイル内置換

    バッチファイルで、置換をしたいのですが、"="と"<"の置換が出来ません。 ping出力を「file.txt」へ保存し、保存した「file.txt」を一行づつ読み出し下記を実行しています。 for /f "delims=" %%a in ( orig ) do ( set line=%%a call :sub ) :sub set tmp=%line% set tmp=%tmp:<=,% set tmp=%tmp:= =,,% set tmp=%tmp:"時間" =,% set tmp=%tmp:ms=,ms% echo %tmp%>>%CSV_Name% goto :EOF :end 置換出来ないのは、"=" と "<"の文字だけが置換出来ません。 ネットで調べたのですが、"^" でエスケープしても、""二重引用部でくくっても、正しく置換でき有ません。

  • バッチファイルでのエラー処理の方法を教えてください

    バッチファイルでのエラー処理の方法を教えてください 例えば、以下のようなバッチファイルがあったとき echo ▼ フォルダ名を入れ替えます(処理1) cd "C:\Test1" move Work temp move Work_bak Work move temp Work_bak echo ▼ フォルダ名を入れ替えます(処理2) rem cd "C:\Test2" move Work temp move Work_bak Work move temp Work_bak (処理1)の時に、 「プロセスはファイルにアクセスできません。別のプロセスが使用中です。」 等のエラーによって、フォルダ名の変更ができなかったとき、 そのエラーがでた以降の処理を行いたくないのですが、 どのように書けばよろしいのでしょうか? 宜しくお願いいたします。 OSはWindows系です。

  • DOSのバッチファイルでカレントフォルダを取得するには?

    現在バッチファイルにファイルをドラッグ&ドロップするとそのファイルを処理するようなバッチを組もうとしています。 おおまかな流れとして  1.ファイルのバックアップ  2.test.exeの引数にファイルのパスを渡す といった事をしたいのですが、バッチファイルにドラッグ&ドロップするとカレントフォルダがC:\Documents and Settings\user\になってしまいます。 バッチファイルのある場所をカレントフォルダとするにはどうすればよいのでしょうか。 以下カレントフォルダを確認した結果です。 OS:Windows2000 実行バッチのパス: C:\Documents and Settings\user\デスクトップ\test.bat ---test.bat---- @echo off cd pause test.bat直接起動 C:\Documents and Settings\user\デスクトップ test.batにファイルをD&D C:\Documents and Settings\user 伝わりづらくて申し訳ございません。 宜しくお願い致します。

  • バッチファイルでファイル名をリネームのコマンドにつ

    お世話になります。 バッチファイルのコマンドについて質問させていただきます。 【やりたいこと】 AAA.batというバッチファイルと”MU_日付.txt”というテキストがあります。 このテキストの日付部分は毎回変わります。例)MU_111226.txt このバッチファイルとMU_日付.txtは同じ階層にあります。 まず、このAAA.batをクリックしたら、この”MU_111226.txt” を ”読み込み.txt” という名前にリネームします。このリネーム処理の時、テキスト名が”MU”で始まるファイル以外は対象にしないようにしたいのです。 次にある処理を行って、その処理が済んだら”読み込み.txt”を”END_MU_111226.txt”といった元のファイル名に”END_”を付けた形でリネームして、同じ階層にある「処理済み」フォルダへ移動させたいのです。 ”END_” + ”元のファイル名”が無理であれば、”MU_111226.txt”を「処理済み」フォルダへ移動させるだけでも構いません。 このような処理は可能でしょうか? どなたjかご教授いただけますでしょうか。よろしくお願い致します。

  • フォルダ階層を変更するバッチファイル?

    社内ネットワーク上にある50台ほどのPC個々について、それぞれのPC内のフォルダ パスを一発で変更させる必要が生じました。例えば、現在 C:\AAA\BBB という階層になっているものを C:\BBBとしたいのです。 このような事を、バッチファイルの様なものを作成し、個々人にやらせたいのですが可能でしょうか? 可能であれば作り方をお教え願えませんでしょうか。よろしくお願いします

  • バッチファイル

    バッチファイルで cd C:\MYDOCU~1\TEST dir の2行を実行するようにしたつもりですが カレントでdirされました。 現在のバッチは @ECHO OFF cd C:\MYDOCU~1\TEST dir なんですが、どこを直せばよいですか?

  • バッチファイルでのリネームについて

    当方WinXPです。 いろいろ調べたのですが、自分のやりたい形での紹介は見つけられなかったので質問させてください。 aaa001.txt aaa002.txt aaa003.txt、のように連番になっているファイルを、 abc001.txt abc002.txt abc003.txt、のように別の連番にリネームするバッチを作りたいんですが、やり方がわかりません。 その場限りではなくて、何回も使いまわせるようにしたいです。 ちなみにやりたい作業内容としては 1:連番のファイルの名前を別の連番にリネーム。 ↓ 2:リネームしたファイルを結合。 ↓ 3:元のファイルを消去。 という感じで、2~3は自力で出来そうなのですが、1の作業ができないので困っています。 分かりにくい質問で申し訳ないですが、是非教えてくださると嬉しいです。 よろしくお願いします。

専門家に質問してみよう