robocopyの怖い話

便宜上 ~~(チルダ2つ)で ${env:USERPROFILE} を表すとする。

~~\AppData\ という隠しディレクトリがある。その下にさらに ~~\AppData\Local\Application Data\ という隠しディレクトリがある(隠しの下の隠し)。

  • ~~\AppData\Local\Application Data\ --> ~~\AppData\Local\

という循環的リンクがある。当然に無限ツリーに展開される。~~\AppData\Local\Adobe\ があるので、アルファベット順で展開すると:

.\Local\Adobe\
.\Local\Application Data\
.\Local\Application Data\Adobe\
.\Local\Application Data\Application Data\
.\Local\Application Data\Application Data\Adobe\
.\Local\Application Data\Application Data\Application Data\
.\Local\Application Data\Application Data\Application Data\Adobe\
.\Local\Application Data\Application Data\Application Data\Application Data\
‥‥‥

という無限ツリーが出来る。

OS組み込みGUIシェル〈エクスプローラー〉などは、この事態を理解しているようだが、コマンドラインから起動されるrobocopyは無限ツリーをたどってしまう。

実際に、~~\AppData\ をUSBドライブに再帰的にコピーしようとしてこの現象が起きてしまった。できてしまった猛烈に深いディレクトリは、パスの長さ制限に引っかかって消せない。作れるけどアクセスできない仕様、どうなってるんだ?


こういう邪悪な循環〈サイクリック〉構造は、Vista以降のディレクトリ構成変更に対応できてないアプリのためにあるそうだ。さすが「互換性の鬼」Microsoftだ。← 褒めてない。

オプション"/XJD"と"/XJF"を加えて解決できそうだとか:


Windowsのリンクは:

  • アプリケーションレイヤーの .lnk ファイル〈ショートカット〉
  • ハードリンク
  • シンボリックリンク
  • ジャンクション〈接合ポイント〉

詳細は知らない。