- ベストアンサー
バッチでファイルのコピーを行う方法とリトライの方法について
- バッチを利用してファイルのコピーを行う方法と、コピーに失敗した場合のリトライ方法について解説します。
- フォルダ内の複数のファイルを別のフォルダにコピーする際、バッチを利用することができます。ただし、コピーに失敗した場合の処理やリトライ方法についても考慮する必要があります。
- copyコマンドを使用してファイルのコピーを行う場合、2回のリトライをする方法は不可能です。リトライを行うためには、バッチ内でfor文を使用して個別にコピーする処理を書く必要があります。具体的な方法について解説します。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
> 上記が可能なのでしょうか? ちょっと実験すればわかりますよ。 実験用コピー元ディレクトリに適当にファイルを複数用意する。 実験用コピー先ディレクトリを用意し、コピー元にあるファイルと同名のファイルを一つ用意し、そのファイルを読み書き禁止にする robocopyを実行 一つ失敗したら全部コピーやり直し、なんて仕様では、使い勝手が悪過ぎます。
その他の回答 (6)
- notnot
- ベストアンサー率47% (4900/10358)
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を追加すればいいでしょうか?
- nerimaok
- ベストアンサー率34% (1125/3221)
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回目のコピー処理でコピーされたファイルが消えているのですべてコピーされてしまい、エラー処理が返されてしまいます)
- nerimaok
- ベストアンサー率34% (1125/3221)
robocopy /? としてヘルプ見てください。 リトライに関する記述も明確に記載されています。
補足
ヘルプを確認したのですが、 リトライの際、ファイルを指定できないように見えるのですが、 ファイルを抽出する手段があるのでしょうか? (このファイルのコピーに失敗したので、このファイルのコピーのみを再度コピーすることが可能なのでしょうか?) 見る限り、 (1)コピーに失敗 (2)/W:* で指定した時間待つ (3)待機後、再度全量のコピーを実施する (4)/R:*で指定した回数実施する のロジックと思うのですが、ここで(3)の処理の際に、全量ではなく、直前で失敗したファイルのみのコピーを実施できるかが分かりませんでした
- Hayashi_Trek
- ベストアンサー率44% (366/818)
OSがVista以降なら、robocopyというのが入っています。 robocopyでフォルダをバックアップ/同期させる http://www.atmarkit.co.jp/ait/articles/0704/20/news130.html
補足
robocopyも考えたのですが、 ・コピーに失敗したファイルは、あと2回コピーのリトライをする (MAX3回コピーを実施する) が実現できるかが分かりませんでした。 フォルダ内で失敗したファイルを選定してコピーの再実行することは可能なのでしょうか?
- no_account
- ベストアンサー率45% (1660/3617)
フォルダ内のファイル全部だったら「xcopy」の方が良いんじゃない? xcopy ファイルをディレクトリ構造ごとコピーする http://www.k-tanaka.net/cmd/xcopy.php
補足
xcopyも考えたのですが、 ・コピーに失敗したファイルは、あと2回コピーのリトライをする (MAX3回コピーを実施する) が実現できるかが分かりませんでした xcopyでも失敗したファイルを選定して再度のコピーを実行することが可能なのでしょうか?
- yambejp
- ベストアンサー率51% (3827/7415)
>コピーに失敗したファイルは、あと2回コピーのリトライをする この意図がわかりません 失敗した直後に同じ処理をしても失敗するだけでは? 失敗するというはどういう状況を想定しているのでしょうか?
補足
記載が漏れていてすいません。 リトライ間隔は60秒の想定です (sleep 60)
補足
ありがとうございます。 こちらでも実験はしてみました。 想定通りの動きになりました