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つの壁だと私は思います。