- ベストアンサー
データファイルのバックアップをBATファイルで出来ないでしょうか?
データファイルのバックアップをディレクトリ30個に 数日ごとにコピーしています。 今は、XCOPYで30行のBATファイルを書いて コピーしています。 ネットワークのファイルの為、ファイル指定のパスが 長くて変更が大変なのです。 FOR..IN(..)DO 繰り返しで短くなると思い、 できるかなと探してみたのですが 参考になるものが無くてアドバイスください。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
亀レスですいません。 これは玉突きで25世代のバックアップを取っていってるんですよね? そのまま置き換えるのであれば下記のような感じになるかと。 ------------------ @echo off rem ## 遅延展開有効 setlocal enabledelayedexpansion rem ** オリジナルMDBパス set OriginalMDBPath=\\aaaa\資料.mdb set Start=24 set End=1 echo xcopy %OriginalMDBPath% D:\aaaa\yobi\ /C /D /E /Y for /L %%I in (%Start%, -1, %End%) do ( set /A Distination=%%I+1 move /Y D:\aaaa\%%I\資料.mdb D:\aaaa\!Distination!\資料.mdb ) echo xcopy %OriginalMDBPath% D:\aaaa\1\ /C /D /E /Y endlocal ------------------
その他の回答 (3)
- icmp
- ベストアンサー率63% (14/22)
ある1つのデータファイルを30個のディレクトリにバックアップしており、 その30個のディレクトリは同じディレクトリの直下にある、という条件であれば こんな感じのバッチになるのではないでしょうか。 (Win2000での動作することは確認していますが、その他のOSは試せてません) ---------- @echo off rem **データファイルパス set DataFilePath=\\hoge1\hoge\Data.dat rem **バックアップディレクトリルートパス set BakDirRootPath=\\hoge2\bak\ rem **バックアップディレクトリ名(スペースで区切る) set BakDirNames=bak1 bak2 bak3 bak4 bak5 rem **バックアップ処理 for %%I in (%BakDirNames%) do ( xcopy "%DataFilePath%" "%BakDirRootPath%%%I\" /H /R /C /Y /Q ) rem **初期化 set DataFilePath= set BakDirRootPath= set BakDirNames=
お礼
参考になりました。ありがとうございます。
補足
参考になりました。ありがとうございます。 質問の説明がわかりづらい説明ですいませんでした。 今、使っているBATファイルをはこんな感じです。 これでも何とか動いていますが、 もっと短く書けるかなと思って 検索してみましたが行き詰まりまっています。 アドバイスよろしくお願いします。 xcopy \\aaaa\資料.mdb d:\aaaa\yobi\ /C /D /E /Y MOVE /Y d:\aaaa\24\資料.mdb d:\aaaa\25\資料.mdb MOVE /Y d:\aaaa\23\資料.mdb d:\aaaa\24\資料.mdb MOVE /Y d:\aaaa\22\資料.mdb d:\aaaa\23\資料.mdb MOVE /Y d:\aaaa\21\資料.mdb d:\aaaa\22\資料.mdb MOVE /Y d:\aaaa\20\資料.mdb d:\aaaa\21\資料.mdb MOVE /Y d:\aaaa\19\資料.mdb d:\aaaa\20\資料.mdb MOVE /Y d:\aaaa\18\資料.mdb d:\aaaa\19\資料.mdb MOVE /Y d:\aaaa\17\資料.mdb d:\aaaa\18\資料.mdb MOVE /Y d:\aaaa\16\資料.mdb d:\aaaa\17\資料.mdb MOVE /Y d:\aaaa\15\資料.mdb d:\aaaa\16\資料.mdb MOVE /Y d:\aaaa\14\資料.mdb d:\aaaa\15\資料.mdb MOVE /Y d:\aaaa\13\資料.mdb d:\aaaa\14\資料.mdb MOVE /Y d:\aaaa\12\資料.mdb d:\aaaa\13\資料.mdb MOVE /Y d:\aaaa\11\資料.mdb d:\aaaa\12\資料.mdb MOVE /Y d:\aaaa\10\資料.mdb d:\aaaa\11\資料.mdb MOVE /Y d:\aaaa\9\資料.mdb d:\aaaa\10\資料.mdb MOVE /Y d:\aaaa\8\資料.mdb d:\aaaa\9\資料.mdb MOVE /Y d:\aaaa\7\資料.mdb d:\aaaa\8\資料.mdb MOVE /Y d:\aaaa\6\資料.mdb d:\aaaa\7\資料.mdb MOVE /Y d:\aaaa\5\資料.mdb d:\aaaa\6\資料.mdb MOVE /Y d:\aaaa\4\資料.mdb d:\aaaa\5\資料.mdb MOVE /Y d:\aaaa\3\資料.mdb d:\aaaa\4\資料.mdb MOVE /Y d:\aaaa\2\資料.mdb d:\aaaa\3\資料.mdb MOVE /Y d:\aaaa\1\資料.mdb d:\aaaa\2\資料.mdb xcopy \\aaaa\資料.mdb d:\aaaa\1\ /C /D /E /Y
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
同じ部分は、 バッチ変数を使えば良いと思います 例えば set NPATH=\\NETPC\SAMPLE\TEST としておけば %NPATH% で利用できます
お礼
参考になりました。ありがとうございます。 パスが長すぎて、コマンドが実行できない時もありました。 SET を使ってみます。
- investyou
- ベストアンサー率23% (13/56)
えーと、いまいちよくつかめませんが ネットワークのファイルをバックアップするバッチファイルを作成していて xcopyのネットワークパスが長いのが不満なんですね? ネットワークの割り当てをすれば普通のcopyコマンドも使えます。よ
お礼
答えてもらって、ありがとうございました。
お礼
返事が遅くてすいません。 ありがとうございました。