xcopyでディレクトリが削除される。


以下のようなディレクトリ構造があります。

[code]

    ~
    │  
    ├─src
    │  │  test.txt
    │  │  test02.txt
    │  │  
    │  ├─save01
    │  │      tmp.csv
    │  │      
    │  └─save02
    └─target
        │  
        ├─save01
        └─save02
    
[/code]

ここでsrcディレクトリのテキストファイルをtargetディレクトリにコピーするために以下のコマンドを用いました。

[code]

    xcopy src\*.txt target /s /y
    
[/code]

すると、targetディレクトリのsave01ディレクトリが削除されてしまいます。  
/sオプションを外せば削除されないことは分かっており、そもそもxcopyではなくcopyコマンドで十分だということも理解しているのですが、save01ディレクトリが削除される理由がわからず、悩んでいます。ご教授願います。




Windows 7/Windows Server 2012 のxcopyコマンドで再現しますね。

  1. コピー元のディレクトリにファイルが存在する。(例ではsrc\save01\tmp.csv)
  2. コピー元指定で対象ファイルをワイルドカード指定している。(例では*.txt)
  3. 1のファイルが全て2の指定で除外されサブディレクトリも無いディレクトリが存在する。(例ではsrc\save01)
  4. 3のディレクトリがコピー先に存在するがファイルとサブディレクトリは存在しない。(例ではtarget\save01)

この場合にxcopy「/S」の実装に不備がありそうです。  
ソースが見れないので想像でしかないですがこんな感じでしょうか。

・ディレクトリツリーのみをコピー(「/S」が指定されているので空のディレクトリは除外)  
・コピーしたディレクトリツリー内のマッチするファイルをコピー  
・「/S」が指定されているのでコピーしたディレクトリツリーの中でコピー先ディレクトリが空のものを削除

