

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

[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ディレクトリが削除される理由がわからず、悩んでいます。ご教授願います。


CC BY-SA 3.0
2015-05-26T13:52:02.180
10644
2015-05-27T02:17:03.317
9071
question
windows
xcopyでディレクトリが削除される。


このような事例がありました。今回の件とは少し違いますが。

<http://answers.microsoft.com/ja-
jp/windows/forum/windows_7-windows_programs/xcopy%E3%81%A7%E3%82%B3%E3%83%94%E3%83%BC%E5%85%88/711a5a86-7987-4bc4-8f0a-ce0fca7e53f2>


CC BY-SA 3.0
2015-05-26T14:43:14.983
10646
2015-05-26T14:43:14.983
9577
10644
answer


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」が指定されているのでコピーしたディレクトリツリーの中でコピー先ディレクトリが空のものを削除


CC BY-SA 3.0
2015-05-27T02:17:03.317
10652
2015-05-27T02:17:03.317
7343
10644
answer