コマンドプロンプト

コマンドプロンプトの『サイクリックコピーは実行できません』の意味と解消法

XCOPYでエラー

コマンドプロンプトでXCOPY
を使ったときに

『サイクリックコピーは実行できません』

というエラーがでました。

実際のエラーが出たスクリプト

xcopy  D:\勤務表 D:\勤務表\backup /s
pause

やりたかったこと

やりたかったのは、バックアップしたいフォルダと同列にbackupフォルダを作り、スクリプトを実行するとそのbackupフォルダへ退避させるということがしたかったです。

原因

XCOPYで/Sがついているため。
※ちなみに/E /Tでも今回の事象がでます。

詳細説明

まず『サイクリック』とは『循環』という意味です。

/sオプションを指定すると指定したコピー元のすべての階層のフォルダをコピーすることなります。

今回エラーが出たスクリプトはコピー元の中にコピー先のフォルダも含まれています。

そのため、全ての階層をコピーしようとしても矛盾が生じ

『サイクリック(循環)コピーは実行できません』

というメッセージがでます。

対処方法

robocopyコマンドで、対象フォルダを除外してコピーする。

詳細説明

残念ながらXCOPYでは、コピー元のフォルダ内にコピー先のフォルダが入っている場合は
すべての階層をコピーすることができません。

ただし、/Sコマンドを外せばファイルだけはコピーできますがフォルダはコピーされません今回の例でいうと「管理資料フォルダ」はコピーされません。

robocopyコマンドで、循環してしまうフォルダを除外するスクリプトを作れば、今回のエラーは解消されます。

改善後スクリプト

robocopy D:\勤務表 D:\勤務表\backup /S /xd backup
pause

補足

XCOPYにも除外をするEXCULDEオプションがありますが、これを使用しても

『サイクリックコピーは実行できません』

というエラーが出ました。おそらく仕様として、EXCLUDEオプションでフォルダを除外する前にコピー元の中にコピー先のフォルダが含まれたらエラーとする仕様なのだと思います。

XCOPYでは実現不可能とみて間違いないと思います。

XCOPYで/Sオプションを使うのであれば、循環しないようにフォルダを指定する必要があります。

エンジニア中級者への道

話は以上ですが、エンジニア初心者を脱出したい方向けに補足です。

まずはエラーメッセージの意味を調べる。

エラーメッセージは一見わけのわからないように見えますが、必ずヒントは隠されています。

今回の場合であれば、『サイクリック』という単語がヒント。

ここで諦めずに意味を調べます。

フォルダがコピー元とコピー先で循環しているんだなぁ

と理解できれば、先に進めます。

エラーメッセージ分析は汎用スキル

また今後、様々なエラーメッセージの原因を調査していくと、エラーメッセージから原因を分析する能力が高くなり、一瞬見ただけで判別がつくようになります。

エラーメッセージを理解する能力は

  • 新しく言語を習得するとき
  • 新しいツールを使うとき

にも役に立つので、汎用的なスキルだと私は思っています。

そうしてくると、プログラマーとしては初級者から脱出できるようになってきます。

最初は丸1日、いや、1週間経ってもわからないものも出てくるかもしれません。

それに根気よく向き合うかどうかが1つの壁だと私は思います。

広告




関連記事