人気ブログランキング | 話題のタグを見る
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が「またはディレクトリ名ですか」ときいてくる罠の回避。 - 片っ端から忘れていけばいいじゃない。
by jehoshaphat | 2010-03-10 18:30 | 豆知識 | Comments(2)
Commented by 264 at 2010-06-15 21:16
b\c ではなくてb:\c と、:が必要ですよね
Commented by jehoshaphat at 2010-06-16 04:09
3流PGです。
私の書き方がまずかったのかもしれませんが、今回のxcopyの対象フォルダは、カレントディレクトリからの相対パス指定で行ってます。なので、「b」というのはドライブ名ではなくフォルダを表しています。
確かに例としているフォルダ名がドライブ名に誤解されない表現だったので、一部記事を修正しておきました。


<< (.Net)デザイナでテーブル... リームバブルディスクの自動実行の禁止 >>