人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

XCOPYについて教えて下さい。
Aサーバーの共有フォルダ内のデータを
Bサーバーの共有フォルダに毎日自動でバックアップを取ります。

Bサーバーの共有フォルダには毎日自動で「20110124」「20110125」のようにフォルダが作成され
Aサーバーの更新されたファイルのみをバックアップして行きます。

%DATE% 関数で実現可能なようですが私には扱いきれません><

どなたかそのまま貼り付ければOK!!のうな回答をお願いします。

●質問者: hogehoho
●カテゴリ:コンピュータ インターネット
✍キーワード:XCOPY サーバー データ バックアップ ファイル
○ 状態 :終了
└ 回答数 : 6/6件

▽最新の回答へ

1 ● deflation
●19ポイント
xcopy [Aサーバの共有フォルダ名] [Bサーバの共有フォルダ名]\%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%\ /e /f /h

参考「xcopyコマンド」

◎質問者からの返答

xcopy D:\B D:\A \%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%\ /e /f /h

上記の様に動かしてみましたがうまくいきませんでした><


2 ● online_p
●19ポイント

http://questionbox.jp.msn.com/qa2538047.html

◎質問者からの返答

ありがとうございます。一通り目を通してみます。


3 ● Mook
●18ポイント

>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日も混ざりますがよしとします。

しかし、今のやり方だと実行する都度日付を記入しなければいけません。

出来ればオートにしたいのですが。

どのように記述したら良いでしょうか?


4 ● okamotoy
●18ポイント

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


5 ● Mook
●18ポイント

先の回答にも書きましたが、下のコメント機能を有効にしてください。

(回答にコメントいただいても返信できませんので。)


私の回答にコメントいただいたことは、先の回答ですべて記載したつもりです。

バッチでの日付計算(前日を求める)は、できなくはないですが大仰な処理になります。

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を返しましたが何も起こりません。


1-5件表示/6件
4.前の5件|次5件6.
関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ