Aサーバーの共有フォルダ内のデータを
Bサーバーの共有フォルダに毎日自動でバックアップを取ります。
Bサーバーの共有フォルダには毎日自動で「20110124」「20110125」のようにフォルダが作成され
Aサーバーの更新されたファイルのみをバックアップして行きます。
%DATE% 関数で実現可能なようですが私には扱いきれません><
どなたかそのまま貼り付ければOK!!のうな回答をお願いします。
>xcopy D:\B D:\A \%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%\ /e /f /h
>上記の様に動かしてみましたがうまくいきませんでした><
はオプションの引数が正しくないからだと思いますが。
日付として指定するのであれば、/D オプションですし、
フォルダ名として指定するのであれば、パスの間にスペースがあってはいけません。
"" でパスを囲むと、このような問題を回避できます。
下記のようにしてどうでしょうか。
@Echo Off Set StrDate=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2% Echo XCopy "D:\B" "D:\A\%StrDate%\" /E /F /S /C /H
ただ、実際にコピーしたいのは前日からの変更分ではないですか?
この仕様だとバックアップを実行した後で、その日に変更した分がコピーされないと思いますが、
日付が変わった直後に前日分をとるというのが、漏れがないかと思います。
できなくはないと思いますがバッチは日付計算が苦手なので、上記の対応をするのであれば、
VBS 等にした方が簡単かもしれません。
一応下記は前日のバックアップを取る VBS のサンプルです。
拡張子を .vbs にして実行してみてください。
Option Explicit Const SrcPath = "D:\A" ' コピー元 Const DstPath = "D:\B" ' コピー先 Dim yesterDate yesterDate = DateAdd("d",Date(),-1) Dim optDate optDate = Month(yesterDate) & "-" & Day(yesterDate) & "-" & Year(yesterDate) Dim folderDate folderDate = Replace(FormatDateTime(yesterDate ,vbShortDate),"/","") CreateObject("WScript.Shell").Run "XCopy """ & SrcPath & """ """ & DstPath & "\" & folderDate & "\"" /C /E /F /H /S /Y /D:" & optDate, , True
タスクスケジューラで実行する場合、黒いコマンドウィンドウが出るのが気になるときには、
Run の第二引数で 0 を指定することでこれを回避できます。
詳細は下記を参照ください。
http://d.hatena.ne.jp/Mook/20090824/1251124084
不明な点はコメントにて対応しますので、有効にお願いします。
コメントありがとうございます。
しかも長々と感激です。
一応バッチでやってみました。
D:\A>xcopy D:\A D:\B\%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%\ /e /f /h /d:01-26-2011
フォルダAは必ず深夜更新されます。
実行するのはAM9:00と仮定しますと、上記の記述だと
2011/01/26以降更新されたファイルとなるかと思います。
パソコンの日付を25日にしてあげると25日以降・・・
余計な26日も混ざりますがよしとします。
しかし、今のやり方だと実行する都度日付を記入しなければいけません。
出来ればオートにしたいのですが。
どのように記述したら良いでしょうか?
set today=%date:/=%
set fromdir=a
set todir=b\%today%
mkdir %todir%
xcopy %fromdir% %todir% /E /H /O
なカンジでどうでしょう.
http://www.atmarkit.co.jp/fwin2k/win2ktips/446xcopy/xcopy.html
先の回答にも書きましたが、下のコメント機能を有効にしてください。
(回答にコメントいただいても返信できませんので。)
私の回答にコメントいただいたことは、先の回答ですべて記載したつもりです。
バッチでの日付計算(前日を求める)は、できなくはないですが大仰な処理になります。
VBScript であれば下の一行です。
DateAdd("d",Date(),-1)
先の回答の後半のスクリプトは、前日からの変更分を XCopy で処理するというものですので、
まずは試してみてもらえますか?
notepad などにコードを張り付け、Backup.vbs などで保存してダブルクリックするだけです。
http://ja.wikipedia.org/wiki/VBScript
下記のコードは、XCopy を実行する代わりに、実行するコマンドの内容をメッセージで表示するものです。
下を実行してもらえば、先の回答が何をしているかもわかると思います。
Option Explicit Const SrcPath = "D:\A" ' コピー元 Const DstPath = "D:\B" ' コピー先 Dim yesterDate yesterDate = DateAdd("d",Date(),-1) Dim optDate optDate = Month(yesterDate) & "-" & Day(yesterDate) & "-" & Year(yesterDate) Dim folderDate folderDate = Replace(FormatDateTime(yesterDate ,vbShortDate),"/","") WScript.Echo "XCopy """ & SrcPath & """ """ & DstPath & "\" & folderDate & "\"" /C /E /F /H /S /Y /D:" & optDate
うまくいかないです><
このように出ています。
「XCopy "D\A" "D:\B\20110127\" /C /E /F /H /S /Y /D:1-27-2011」
ポップアップしてOKを返しましたが何も起こりません。
xcopy D:\B D:\A \%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%\ /e /f /h
上記の様に動かしてみましたがうまくいきませんでした><