|
98) 特定のファイルの更新履歴バックアップバッチファイルを作りたい初心者です Teru 2003/01/17(金) 21:46 |
|
初めまして Teruと申します。 宜しくお願いします。 さてウインドウズMEのMS-DOSプロンプト内で実行するバッチファイルを作りたいのです。 そのバッチファイルでは 目的のファイルが更新されるたびに異なるフォルダに更新された順番にファイル名を変えて保存したいのです。 例えば、c:\data\originalfile.docと名付けられたファイルをc:\backup\originalfile.docと名付けてバックアップします。 次にc:\data\originalfile.docを更新した後でc:\backup\originalfile(1).docと名付けてバックアップします。 更にc:\data\originalfile.docを更新した後でc:\backup\originalfile(2).docと名付けてバックアップします。 このバッチファイルを繰り返すと c:\backupフォルダ内にはoriginalfile.doc originalfile(1).doc originalfile(2).docとファイル名に連番を付したファイルがたくさん作られます。 このバッチファイルはできれば元ファイルを編集するアプリケーションソフトが終了するたびに実行したいと思っています。 宜しくお指導お願いいたします。 |
|
99) Re:特定のファイルの更新履歴バックアップバッチファイルを作りたい初心者です ふぇむ 2003/01/18(土) 08:02 |
|
ふぇむと申します。 >さてウインドウズMEのMS-DOSプロンプト内で実行するバッチファイルを作りたいのです。 ふぇむはMeの経験はないんですが、おそらくMeのDOSプロンプトで使えるバッチコマンドはWin2000やXPに比べてかなり制約が大きくて、スクリ プトとしての表現力がかなり乏しいのではないでしょうか。つまり、できないことが多いです。ご要望の仕様では、例えば「既存のファイルの連番の最大の番号 に1足した番号を得る」という部分などが、Meの純粋なDOSのバッチコマンドだけでは実現し得ないような気がします。 市販やシェアウェアで似たようなことをするソフトもいろいろあると思います。自作にこだわるなら、例えば WindowsScriptingHostのスクリプトでコンソール対話的に書いて、cscriptで起動することでバッチコマンドとして使う方が表現力 が高いでしょう。または、awk や perl や ruby などの、コマンドラインで利用できる別のスクリプトで書く、またはそれらを混用する、などで、トータルの表現力を高めれば可能かと思います。 >そのバッチファイルでは 目的のファイルが更新されるたびに異なるフォルダに更新された順番にファイル名を変えて保存したいのです。 >このバッチファイルはできれば元ファイルを編集するアプリケーションソフトが終了するたびに実行したいと思っています。 要件のディティールがわからないのでなんともいえませんが、「更新されるたびに」のトリガーというか判定を拾うのも難しそうですね。編集アプリの正常終了 ごとに、ファイルを比較して、... といったようなイメージイメージですか?また、比較的汎用にするつもりなら、ファイルのパスやファイル名情報の引渡しなどもちょっと面倒かも。決めうちな らまだなんとかなるでしょうが....。 |
|
100) Re2:特定のファイルの更新履歴バックアップバッチファイルを作りたい初心者です ふぇむ 2003/01/18(土) 08:13 |
|
ふぇむと申します。もうちょい補足。 ふぇむも以前Windows2000ベースですが、似たようなものを作ったことがあります。仕事の上で、ある重要なExcelファイルの修正を若手にまか せていたら、表のソートをすべての列を含めずにやってしまた上にそれに気づかず編集していたらしく、めちゃめちゃになってしまい復元におおわらわしたこと があり、この時は、そのExcelに必要なソートを一発で行うマクロを加えるとともに、そのファイルを編集するためのバッチコマンドを組んで、それを使 え!とルール化しました。 そのバッチコマンドの中は、編集を起動する「前」に、その時点のファイルにタイムスタンプつけてLHA圧縮してバックアップコピーを保存する、というもの でした。というのは、たいてい戻したい基点は「編集の直前」だから、です。「前回編集後」、だと、もしかすると誰かが「前回編集後から今の編集直前までの 間」に、そのコマンドを使わず別途編集していたりするかもしれないから、です。 ということで、バックアップファイルの用途をイメージして適切なタイミングでのバックアップをとらないと、ファイルのデグレードが発生する余地が多くなる 可能性があると思います。ルールはなかなか守れないですよ~。たとえ使うのが自分ひとりであっても、ついうっかりとかもあるし。 |
|
101) Re3:特定のファイルの更新履歴バックアップバッチファイルを作りたい初心者です ふぇむ 2003/01/18(土) 08:23 |
|
ふぇむと申します。もうちょっとだけ補足。 そのとき作ったバッチコマンドは、もうちょっと進化させて、引数に列挙された複数のファイルまたはディレクトリ全てを、それぞれタイムスタンプつけて LHA圧縮して、スクリプトの存在する同じディレクトリ下に「ばっくあっぷこぴー」というディレクトリ(が無かったら作って)に保存する、というように し、さらに起動するショートカットを作ってExplorerのマウス右クリックでの「送る」に入れたり、タスクバーにアイコンとして登録しておいて、必要 なファイルやディレクトリを複数選んでドラッグ&ドロップで一気にバックアップとったり、などといった使い方をしています。 現実問題として、個人で使う分にはほとんどこれでおっけーですね。 |
|
105) Re4:特定のファイルの更新履歴バックアップバッチファイルを作りたい初心者です Teru 2003/01/19(日) 08:18 |
|
ふぇむさんコメントありがとうございます。 昨日土曜日はパソコンの前に座る時間がなく今になりました。 遅くなったことをお詫び申し上げます。 コメントしていただいた方法を私のボンクラな頭で整理し活用できたらと思います。 とりあえずお礼まで |
|
103) Re2:特定のファイルの更新履歴バックアップバッチファイルを作りたい初心者です SYSOP 2003/01/18(土) 15:42 |
|
Teruさん、ふぇむさん、こんにちは。 >おそらくMeのDOSプロンプトで使えるバッチコマンドはWin2000やXPに比べてかなり制約が大きくて、スクリプトとしての表現力がかなり乏しいのではないでしょうか。つまり、できないことが多いです。 これはとりあえずその通りですね。ただ、制約が多いなりに、その範囲で方法を考えるのも案外面白かったりしますけど(^^;。 >例えば「既存のファイルの連番の最大の番号に1足した番号を得る」という部分などが、Meの純粋なDOSのバッチコマンドだけでは実現し得ないような気がします。 ・"02"はすでにあるけれども"01"が抜けていた場合に"01"が選ばれてよい。 ・連番の上限値はあまり大きくなくてもよい。 という条件でよければ、「力技」ですけど次のような手法はあります。 動作確認してないですが(^^;、長いファイル名が使われている点を除けば5.0以降のDOS/Windowsのどのバージョンでも有効な範囲で書いてあります。 ※もとのご質問ではファイル名は「決めうち」のようですので、そのまま書いてます。このへんに汎用性を持たせようとすればちょっと面倒なことになる(あるいは、標準のコマンドだけでは困難だったりする)のは、ふぇむさんがすでにお書きの通りです。 @echo off set number=00 if "%number%"=="" goto error01 for %%N in (10 09 08 07 06 05 04 03 02 01) do if not exist c:\data\originalfile%%N.doc set number=%%N if number==00 for %%N in (20 19 18 17 16 15 14 13 12 11) do if not exist c:\data\originalfile%%N.doc set number=%%N rem 同じような処理行を追加すれば、変数はもっと増やすことが可能です。 rem 数字は大⇒小の順にしないと「空いている中で最小の番号」が抽出できません。 if %number%==00 goto error02 rem 01から20までに番号の空きがない場合のエラー処理 copy c:\data\originalfile.doc c:\backup\originalfile%number%.doc goto quit :error01 echo 環境変数記憶領域が不足しているようです。 echo バックアップ処理は行われませんでした。 goto quit :error02 echo バックアップファイル名の空きが見つかりませんでした。 echo 古いバックアップファイルを整理するか、バッチファイルを改良してください(^^;。 echo バックアップ処理は行われませんでした。 :quit YanaKen [個人homepage ]http://homepage3.nifty.com/yanaken/ [@pay窓口 ]http://pay.nifty.com/pay/servlet/pr?i=BDKQ048560 [@pay導入について]http://bbs1.nifty.com/mes/cf_wrent/FPCU_B017/ |
|
106) Re3:特定のファイルの更新履歴バックアップバッチファイルを作りたい初心者です Teru 2003/01/19(日) 08:25 |
|
シスオペさんコメントありがとうございます。 昨日土曜日はパソコンの前に座る時間がなく今になりました。 遅くなったことをお詫び申し上げます。 コメントしていただいた方法を私のボンクラな頭で整理し活用できたらと思います。 とりあえずお礼まで |
|
107) Re3:特定のファイルの更新履歴バックアップバッチファイルを作りたい初心者です Teru 2003/01/19(日) 11:23 |
|
Teruです お世話になります。 >@echo off > set number=00 > if "%number%"=="" goto error01 > > for %%N in (10 09 08 07 06 05 04 03 02 01) do if not exist c:\data\originalfile%%N.doc set number=%%N > if number==00 for %%N in (20 19 18 17 16 15 14 13 12 11) do if not exist c:\data\originalfile%%N.doc set number=%%N >rem 同じような処理行を追加すれば、変数はもっと増やすことが可能です。 >rem 数字は大⇒小の順にしないと「空いている中で最小の番号」が抽出できません。 > > if %number%==00 goto error02 > > rem 01から20までに番号の空きがない場合のエラー処理 > copy c:\data\originalfile.doc c:\backup\originalfile%number%.doc >goto quit > >:error01 > echo 環境変数記憶領域が不足しているようです。 > echo バックアップ処理は行われませんでした。 >goto quit > >:error02 > echo バックアップファイル名の空きが見つかりませんでした。 > echo 古いバックアップファイルを整理するか、バッチファイルを改良してください(^^;。 > echo バックアップ処理は行われませんでした。 > >:quit > 紹介していただいたバッチファイルを実行してみました。 構文の中を一部修正いたしましたら、バッチリ動きました。 たぶん 私に学習のチャンスをくださるつもりでわざと間違えていただいたのでは思います。 なんとなく理解できたようでたいへん感激しています。 重ねてありがとうございました。 |
|
110) Re4:特定のファイルの更新履歴バックアップバッチファイルを作りたい初心者です SYSOP 2003/01/19(日) 16:15 |
|
>紹介していただいたバッチファイルを実行してみました。 >構文の中を一部修正いたしましたら、バッチリ動きました。 >たぶん 私に学習のチャンスをくださるつもりでわざと間違えていただいたのでは思います。 どこかミスってましたか。別に意図したわけではなく、単に動作確認してないだけです(^^;。 ほかの方がこのツリーの発言を参考にした場合に、同じ場所でつまづくことになる可能性がありますので、どこが違ってたかコメントしておいていただけるとうれしいです。 YanaKen [個人homepage ]http://homepage3.nifty.com/yanaken/ [@pay窓口 ]http://pay.nifty.com/pay/servlet/pr?i=BDKQ048560 [@pay導入について]http://bbs1.nifty.com/mes/cf_wrent/FPCU_B017/ |
|
111) Re5:特定のファイルの更新履歴バックアップバッチファイルを作りたい初心者です Teru 2003/01/19(日) 17:32 |
|
お世話になりました。 以下の表現でお分かりになるでしょうか いや 本当に勉強になってよかったと思っています。 ありがとうございます。 @echo off set number=00 if "%number%"=="" goto error01 for %%N in (10 09 08 07 06 05 04 03 02 01) do if not exist c:\data\originalfile%%N.doc set number=%%N ++++++上記の行のdataフォルダでなくbackupフォルダでした++++++ if number==00 for %%N in (20 19 18 17 16 15 14 13 12 11) do ++++++上記の行の number の前後の変数を表す%がありませんでした。++++++ if not exist c:\data\originalfile%%N.doc set number=%%N rem 同じような処理行を追加すれば、変数はもっと増やすことが可能です。 rem 数字は大⇒小の順にしないと「空いている中で最小の番号」が抽出できません。 if %number%==00 goto error02 rem 01から20までに番号の空きがない場合のエラー処理 copy c:\data\originalfile.doc c:\backup\originalfile%number%.doc goto quit :error01 echo 環境変数記憶領域が不足しているようです。 echo バックアップ処理は行われませんでした。 goto quit :error02 echo バックアップファイル名の空きが見つかりませんでした。 echo 古いバックアップファイルを整理するか、バッチファイルを改良してください(^^;。 echo バックアップ処理は行われませんでした。 :quit |
- ◆98. 特定のファイルの更新履歴バックアップバッチファイルを作りたい初心者です (Teru) 2003/01/17(金) 21:46
- 99. Re:特定のファイルの更新履歴バックアップバッチファイルを作りたい初心者です (ふぇむ) 2003/01/18(土) 08:02
- 100. Re2:特定のファイルの更新履歴バックアップバッチファイルを作りたい初心者です (ふぇむ) 2003/01/18(土) 08:13
- 101. Re3:特定のファイルの更新履歴バックアップバッチファイルを作りたい初心者です (ふぇむ) 2003/01/18(土) 08:23
- 105. Re4:特定のファイルの更新履歴バックアップバッチファイルを作りたい初心者です (Teru) 2003/01/19(日) 08:18
- 101. Re3:特定のファイルの更新履歴バックアップバッチファイルを作りたい初心者です (ふぇむ) 2003/01/18(土) 08:23
- 103. Re2:特定のファイルの更新履歴バックアップバッチファイルを作りたい初心者です (SYSOP) 2003/01/18(土) 15:42
- 106. Re3:特定のファイルの更新履歴バックアップバッチファイルを作りたい初心者です (Teru) 2003/01/19(日) 08:25
- 107. Re3:特定のファイルの更新履歴バックアップバッチファイルを作りたい初心者です (Teru) 2003/01/19(日) 11:23
- 110. Re4:特定のファイルの更新履歴バックアップバッチファイルを作りたい初心者です (SYSOP) 2003/01/19(日) 16:15
- 111. Re5:特定のファイルの更新履歴バックアップバッチファイルを作りたい初心者です (Teru) 2003/01/19(日) 17:32
- 110. Re4:特定のファイルの更新履歴バックアップバッチファイルを作りたい初心者です (SYSOP) 2003/01/19(日) 16:15
- 100. Re2:特定のファイルの更新履歴バックアップバッチファイルを作りたい初心者です (ふぇむ) 2003/01/18(土) 08:13
- 99. Re:特定のファイルの更新履歴バックアップバッチファイルを作りたい初心者です (ふぇむ) 2003/01/18(土) 08:02