• ベストアンサー

データファイルのバックアップをBATファイルで出来ないでしょうか?

データファイルのバックアップをディレクトリ30個に 数日ごとにコピーしています。 今は、XCOPYで30行のBATファイルを書いて コピーしています。 ネットワークのファイルの為、ファイル指定のパスが 長くて変更が大変なのです。 FOR..IN(..)DO 繰り返しで短くなると思い、 できるかなと探してみたのですが 参考になるものが無くてアドバイスください。 よろしくお願いします。

  • 601
  • お礼率93% (15/16)

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

  • ベストアンサー
  • icmp
  • ベストアンサー率63% (14/22)
回答No.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 ------------------

601
質問者

お礼

返事が遅くてすいません。 ありがとうございました。

その他の回答 (3)

  • icmp
  • ベストアンサー率63% (14/22)
回答No.3

ある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=

601
質問者

お礼

参考になりました。ありがとうございます。

601
質問者

補足

参考になりました。ありがとうございます。 質問の説明がわかりづらい説明ですいませんでした。 今、使っている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)
回答No.2

同じ部分は、 バッチ変数を使えば良いと思います 例えば set NPATH=\\NETPC\SAMPLE\TEST としておけば %NPATH% で利用できます

601
質問者

お礼

参考になりました。ありがとうございます。 パスが長すぎて、コマンドが実行できない時もありました。 SET を使ってみます。

  • investyou
  • ベストアンサー率23% (13/56)
回答No.1

えーと、いまいちよくつかめませんが ネットワークのファイルをバックアップするバッチファイルを作成していて xcopyのネットワークパスが長いのが不満なんですね? ネットワークの割り当てをすれば普通のcopyコマンドも使えます。よ

601
質問者

お礼

答えてもらって、ありがとうございました。

関連するQ&A

  • Batファイルについて

    複数階層のフォルダにまたがって格納されているエクセルファイルをBatファイルでコピー、又は、移動させたいのです。コピー、移動させたいファイルのファイル名の頭(顧客IDになっている)を拾ってリストにしてあります。移動させたいエクセルファイルが複数のフォルダに入っているので、最上階層のフォルダでbatファイルを実行できればと思っています。 現在は複数あるフォルダの中に下記のBatファイルと対象リスト.txtをを入れて1フォルダずつ実行していますが、数十個あるフォルダなので作業が大変です。最上階層で出来るようにしたいのです。 FOR /F %%i in (list.txt) do copy %%i "移動先のパス"

  • バッチファイルについて質問させて下さい。

    下記のようなcsvファイルまたはテキストファイルに纏めた移行元パス、移行先パスの情報をfor /fで行毎に参照しコピー処理を行うバッチファイルを作成したいと考えているのですが頓挫しております。 出来るだけバッチファイルで実現したいのですが可能でしょうか。お手数ですがご教示下さい。 (コマンドはxcopyを想定しています。) ------file.csv---------- 移行元パス1,移行先パス1 移行元パス2,移行先パス2 ・        ・ ・        ・ ---------------------- for /f "delims=,"%%a in (file.csv) do xcopy %%a 上記では移行先が指定できないので動きませんでした。

  • batファイルでrenameができません。

    Windowsのbatファイルでrenameをするにはどうすればよいでしょうか? カレントディレクトリ └ A というディレクトリ構造があって、Aの中には「a.txt」があるとします。 カレントディレクトリから、 「rename "./a/A.txt" B.txt」 と書いてあるbatファイルを起動しても、「a.txt」の名前が変更されません。 「指定したパスが見つかりません。」と出てきてしまいます。 ダブルクォーテーションを取ったりつけたり、絶対パス、相対パスを書いたりと いろいろ試しましたがだめでした。 何か方法はないでしょうか?

  • batファイルで、引数のファイルリストを作りたい。

    あるbatファイルを作成しようとしています。 目的は、複数のファイルを選択して、batファイルにドラッグすると、そのパスをテキストファイルに書き込んでほしいのです。 for文を使おうと思ったのですが、以下の内容だとうまくいきません。 type NUL > "./test.txt" for %%i in (%*) do echo %%i >> "./test.txt" 空のファイルは作成されるのですが、ファイル名は記録されません。 何か方法があれば教えていただけないでしょうか?

  • ファイルリストを元に階層を保ったファイルコピー

    コピーしたいファイルのフルパスが書かれているtxtファイルを元に、復数ファイルのコピーを行いたいです。 下記の質問を元にbatを作成しましたが、階層は保たれないようで…。 xcopyでならいけるかと修正してみたものの、フルパスのせいか希望する動作になりませんでした。 http://okwave.jp/qa/q5030613.html ディレクトリ構造を保ちながらコピーできるbatの作り方、または上記可能なフリーソフトをご教示いただきたいです。

  • 古いフォルダーを削除するbatファイル

    batファイルでディレクトリのバックアップを行いました。 このバックアップを行うときに古いディレクトリを 削除するbatファイルを考えているのですがうまくいきません。 どなたかお知恵をお貸しください。 下記のように名前が付けられたディレクトリがあります。 090601 090602 090603 090604 このディレクトリの日付が古いディレクトリを削除するようにしたい。 (上記の場合090601が該当) 変数にディレクトリの090601を入れられるようなbatを作ればいいのでしょうが。 それが浮かびません。 どのようにしたらよろしいでしょうか??

  • (VBA)bat処理の結果がおかしい

    以下の1)から5)までをVBAで行いたいのですが 1)、2)までのコードはネットを参考に作成したのですが  2)の結果が¥tempに書き出されませんでした。   (C:¥に直接書き出される) 原因は何でしょうか ?  (コードの修正をお願いします。) 以下は、行いたい事のイメージ。-------------------------------------------------- 1)指定ディレクトリにディレクトリ(C:\)に保存した   BATファイル(aa.bat)をコピーする 2)指定ディレクトリ内でaa.batを起動する 3)指定ディレクトリーに最初から存在したフォルダーを削除する 4)aa.batによって作成されたフォルダーを最初のフォルダー名に変名する 5)aa.batをコピー先から削除する 例:指定ディレクトリをC:¥temp、aa.batをC:\tempにコピーしたと  C:¥temp¥AA  C:¥temp\AA¥subAA   C:\temp\aa.bat aa.batを\temp内で起動した後で ------>を実施  C:¥AA    ------> 削除  C:¥AA_SUBAA ------> C:\AAに変名  C:\temp\aa.bat -----> 削除 最終的に  C:¥temp\AA --------------------------------------- Sub Test() Dim strPath As String Dim intPathLen As Integer Dim intR As Integer Dim F As Variant Dim obj As WshShell Dim sPath 'Range("A5:F100").Clear ' フォルダーを自由に選べること。 参考:officeTANAKA With Application.FileDialog(msoFileDialogFolderPicker) If .Show = True Then ' MsgBox .SelectedItems(1) If Len(.SelectedItems(1)) = 3 Then ' c:\の場合とサブフォルダーの場合 mypath = .SelectedItems(1) Else mypath = .SelectedItems(1) & "\" End If End If End With If mypath = Empty Then MsgBox "フォルダー名の指定をキャンセルしました。": Exit Sub MyName = Dir(mypath, vbDirectory) ' 最初のフォルダ名を返します。 ’Range("A2") = mypath 'コピー先フォルダーの指定 'BATファイルのコピー FileCopy "C:\aa.bat", mypath & "aa.bat" 'batファイルの起動 sPath = mypath & "\aa.bat" Set obj = New WshShell Call obj.Run(sPath, WaitOnReturn:=True) End Sub ------------------------------------------------------------------- 以下は、aa.batの内容です。 for /d %%i in (*) do ( pushd . cd %%i for /d %%j in (*) do ren "%%j" "%%i_%%j" for /d %%k in (*) do ren "%%k" "../%%k" popd rd "%%i" ) -------------------------------------------

  • コマンドプロンプトで.batファイルを作っています。

    古いバックアップディレクトリを削除するバッチファイルを作りたいです。 cd /d e:\fileDir REM:【最終のディレクトリを削除】 for /F %F in ('dir /b /o:-d') do set fname=%F rmdir /s /q %fname%  をコマンドプロンプト画面に貼り付ければ上手く動作しますが*.batと名前を付けて保存したものをダブルクリックでは全く動作しません。  コマンドプロンプト上で実行するのとバッチファイルで実行することの違いについて調べてみましたがなかなか動作するものになりません。  どなたかご教示いただけないでしょうか    

  • batファイルで親フォルダのコピー

    素人で大変申し訳ございません。 batファイルについて教えてください。 ・「batファイルがあるフォルダ」の一つ上の階層にある「hoge」フォルダを  「hoge_bak」にして、「batファイルがあるフォルダ」にコピーしたい ・相対パスで指定したい。 ・コマンドプロンプトではなく、「bat」ファイルで作成したい のですが、batファイルの書き方がわかりません。 ご存知の方、batファイルに書く「ソース」を教えて頂きたいので よろしくお願いします。 ※ネットで参考文献をいろいろ見たのですが、  私の知識が足りなさすぎて実現できませんでした。。。

  • 古いファイルのバックアップについて

    ご存知の方がおられましたら、お教えください。 指定された年数よりも古いファイルのバックアップ方法を探しています。 ・ファイルの更新日が例えば3年よりも古いものを別ドライブに移動する。 ・そのとき、もとのファイルのディレクトリのパスもコピーして、まったく同じディレクトリ  構造にする。 ・WindowsXPで動作し、フリーでも有料でもかまいません。 いろいろと探してみたのですが、上記の要件を満たすものかどうかが判別が つきにくく、ご教示いただけますと助かります。 どうか、よろしくお願い申し上げます。