3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。(jehupc.exblog.jpから移転中)

xcopyでフォルダコピー時に「ファイル名ですか、またはディレクトリ名ですか」と聞いてくる

下記のようなバッチファイルで、xcopy でフォルダコピーを書いてました。(相対パス指定でのコピーです。a,b,cはフォルダを表してます。)

xcopy "a" "b\c" /e /c /q /y

pause

なお、この時のフォルダ構成は下記のような感じです。

├─a

│ └─a

│ test.txt

└─b

コピー先が b¥c なのですが、c フォルダが無いパターンです。

この場合、バッチを実行すると下記のようなメッセージが表示され、入力を要求されます。

D:\mydoc\豆知識>xcopy "a" "b\c" /e /c /q /y

b\c は受け側のファイル名ですか、

またはディレクトリ名ですか

(F= ファイル、D= ディレクトリ)?

"D"を選択すると、ちゃんとコピーされますが、"F"を選択すると、c というファイルができてしまいます。

XCOPY - 拡張COPY [FPCU]DOS/V&Windowsコマンド・プロンプト・リファレンスによると、「複写先が既存のディレクトリを含まず、かつ、名前が円記号(¥)で終わっていない場合」に表示されるようです。

回避策としては、/i オプションを付けるか、受け側の指定を¥で終端するといいようです。

xcopy "a" "b\c\" /e /c /q /y

もしくは

xcopy "a" "b\c" /e /c /q /y i

余談ですが、ファイルのコピーで xcopy 使うときも同様の現象が出るようなので、下記のように強制的にファイルに指定してやるといいようです。

echo F | xcopy test.txt test2.txt /R /Y

参考:

単一ファイルコピー時に xcopyが「またはディレクトリ名ですか」ときいてくる罠の回避。 - 片っ端から忘れていけばいいじゃない。