dポイントプレゼントキャンペーン実施中!

バッチを利用してファイルのコピーを実施しようとしておりまあす

あるフォルダ内にあるファイルをすべて別のフォルダに移動したいのですが、

このとき、
・コピー対象のファイルは、MAXで11ファイル(cpfile1.csv-cpfile11.csv)ですが、すべて存在するとは限らない
・コピーに失敗したファイルは、あと2回コピーのリトライをする
(MAX3回コピーを実施する)
・途中でコピーが失敗したファイルがあったとしても、フォルダ内のすべてのファイルに対してコピーを行う


copy /Y c:A\cp_from\*.csv c:A\cp_to\*.csv
で行おうとしたのですがこの場合、2回のリトライを行う方法が不明でした

for文を利用して行うべきなのでしょうか?
またその時にはどのように書けばよいのでしょうか>
お分かりになられる方がおりましたら、ご教授お願いいたします

A 回答 (7件)

> 上記が可能なのでしょうか?



ちょっと実験すればわかりますよ。

実験用コピー元ディレクトリに適当にファイルを複数用意する。
実験用コピー先ディレクトリを用意し、コピー元にあるファイルと同名のファイルを一つ用意し、そのファイルを読み書き禁止にする
robocopyを実行



一つ失敗したら全部コピーやり直し、なんて仕様では、使い勝手が悪過ぎます。

この回答への補足

ありがとうございます。
こちらでも実験はしてみました。


想定通りの動きになりました

補足日時:2014/11/10 10:00
    • good
    • 0

for %%F in (C:\A\cp_from\*.csv) do (


 copy %%F C:\A\cp_to\ || (
 timeout /t 60 & copy %%F C:\A\cp_to\ || (
 timeout /t 60 & copy %%F C\A\cp_to\
)))

とかですかね。テストしてませんが。

あるいは、「すべて存在するとは限らない。リトライしたい」というのが、
まだできてないファイルがあれば出来るのを待つという意味なら、違ってきますが。

この回答への補足

イメージとしては、上記のコマンドに、
・2回目以降(timeout以降)の処理は、1回目の処理で失敗したファイルのみを実施する
を追加したものを想定しています。
上記のロジックにerrorlevelを追加すればいいでしょうか?

補足日時:2014/11/10 09:32
    • good
    • 1

OS何使ってますか?


XP用でもR:nオプションは有るんですけど。

::
:: 再試行オプション:
::
/R:n :: 失敗したコピーに対する再試行数: 既定値は 1,000,000。
/W:n :: 再試行と再試行の間の待機時間: 既定値は、30 秒です。

/REG :: /既定の設定としてレジストリに R:n と /W:n を保存します。

/TBD :: 共有名が定義されるのを待ちます (再試行エラー 67)。

この回答への補足

R:nオプションでリトライは分かっているのですが、
コピー先の環境が
・そこにファイルが置かれた瞬間に処理を実施する
 (コピー先の環境からまた別の環境へファイルを移動させ、処理を行う。その後、同一のファイル名のファイルが来た場合、エラー処理を実施する)

という仕様になっているため、
一度成功したファイルを再度コピーするとエラーになります。
そのため、リトライは「コピーに失敗したファイルのみ」を実施したいというのが可能なのかが不明点です。

例:
cpfile1.csv-cpfile11.csvをコピーするとき、
1回目のコピー処理でcpfile7.csvが失敗した場合に、
 ・1回目のコピー処理で残りのcpfile8.csv-cpfile11.csvのコピーを実施する
 ・2回目のコピー処理(リトライ)では、cpfile7.csvのみコピー処理を実施する



上記が可能なのでしょうか?
(robocopyでは、例のような場合、再度cpfile1.csvーcpfile11.csvのすべてをコピーしようとするのではないでしょうか?その場合、コピー先のフォルダには次処理によって既に1回目のコピー処理でコピーされたファイルが消えているのですべてコピーされてしまい、エラー処理が返されてしまいます)

補足日時:2014/11/07 18:08
    • good
    • 0

robocopy /?


としてヘルプ見てください。
リトライに関する記述も明確に記載されています。

この回答への補足

ヘルプを確認したのですが、
リトライの際、ファイルを指定できないように見えるのですが、
ファイルを抽出する手段があるのでしょうか?
(このファイルのコピーに失敗したので、このファイルのコピーのみを再度コピーすることが可能なのでしょうか?)

見る限り、
 (1)コピーに失敗
 (2)/W:* で指定した時間待つ
 (3)待機後、再度全量のコピーを実施する
 (4)/R:*で指定した回数実施する
のロジックと思うのですが、ここで(3)の処理の際に、全量ではなく、直前で失敗したファイルのみのコピーを実施できるかが分かりませんでした

補足日時:2014/11/07 15:10
    • good
    • 0

OSがVista以降なら、robocopyというのが入っています。



robocopyでフォルダをバックアップ/同期させる
http://www.atmarkit.co.jp/ait/articles/0704/20/n …

この回答への補足

robocopyも考えたのですが、
・コピーに失敗したファイルは、あと2回コピーのリトライをする
(MAX3回コピーを実施する)
が実現できるかが分かりませんでした。
フォルダ内で失敗したファイルを選定してコピーの再実行することは可能なのでしょうか?

補足日時:2014/11/07 13:08
    • good
    • 0

フォルダ内のファイル全部だったら「xcopy」の方が良いんじゃない?




xcopy
ファイルをディレクトリ構造ごとコピーする
http://www.k-tanaka.net/cmd/xcopy.php

この回答への補足

xcopyも考えたのですが、
・コピーに失敗したファイルは、あと2回コピーのリトライをする
(MAX3回コピーを実施する)
が実現できるかが分かりませんでした
xcopyでも失敗したファイルを選定して再度のコピーを実行することが可能なのでしょうか?

補足日時:2014/11/07 13:10
    • good
    • 0

>コピーに失敗したファイルは、あと2回コピーのリトライをする



この意図がわかりません
失敗した直後に同じ処理をしても失敗するだけでは?
失敗するというはどういう状況を想定しているのでしょうか?

この回答への補足

記載が漏れていてすいません。
リトライ間隔は60秒の想定です
(sleep 60)

補足日時:2014/11/07 13:10
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!