• ベストアンサー

XCOPY コマンドがドライブパスを消してしまう

Win7x64 Ultimate C: システム D: データ という風に使ってます。  この度、D:データ のバックアップのためにハードディスクを追加しました。  C:\Backup というフォルダを新規作成し、この追加したバックアップ用のハードディスクを論理ディスクマネージャから C:\Backup というドライブパスに割り当てました。  エクスプローラで C:\Backup を見ると、違ったアイコンの絵に変わっており、数GBのファイルを置いても C: の容量が減らないことから、C:\Backup の中身は追加されたハードディスクに繋がっていると判断しました。  次に、D: → C:\Backup の全データコピーのために    xcopy d:\ c:\Backup /D /E /V /C /I /R /K /X /Y というコマンドで行うようにしてみました。  試しに、叩いてみて暫く放置させてみると・・・  C:\ がディスク空き不足で止まってました。  ??と思って、エクスプローラを見ると、先ほどまで違ったアイコンになっていた C:\Backup のフォルダアイコンが普通のアイコンに戻っていて、直に C: の中にファイルが置かれてました。  論理ディスクマネージャで確認しますと、XCOPY をするまでは確実に出来ていた C:\Backup へのドライブパスも消えてました。  総論すると、XCOPY を実行開始したタイミングで、ドライブパスが勝手に削除されてしまう、という風になってます。  エクスプローラで丸コピーする分には(当然ですが)ドライブパスも勝手に削除されずに、正しく追加されたハードディスクにコピーされます。  ちなみに、追加したハードディスクを C:\Backup じゃなくて、E: 等の普通のドライブレターに割り当てて、XCOPY ~ もそれに準じて書き換えて実行しますと、所望の動作をしてくれます。 (もちろんドライブレターを勝手に消すこともない)  この XCOPY の動作って変じゃないですか?  私の Win7 だけで起きる現象なんでしょうか??

質問者が選んだベストアンサー

  • ベストアンサー
noname#110816
noname#110816
回答No.2

xcopyはスペック通りに機能しているのではないでしょうか。 今回の事例に限っては /i option の使いかたに起因しているような気がします。 /i をカットして、xcopyが確認要求してきた場合に「 d 」で応えてはどうでしょうか。 > C:\Backup じゃなくて、E: 等の普通のドライブレターに割り当てて、XCOPY ~ もそれに準じて書き換えて実行しますと、所望の動作をしてくれます。 これも /i option がスペック通りに機能しているからでしょう。 以上です。

YoshiakiKun
質問者

お礼

ありがとうございます。 オプション類を最小限にしてみました。 xcopy d:\ c:\backup /s これでも、ドライブパスが消えます。 エクスプローラか何かで C:\Backup の中を開いておけば、削除されませんが、それは排他エラーに引っかかってドライバパスの削除失敗になってるだけなので。。。 コピーされないとか、そういう挙動ならば理解できるのですが、ドライブパスを勝手に消してしまうのは、下の方が書かれたアクセス権も勝手に消してしまう、と併せて仕様というよりもバグだと思いたいものです。 NT4 の時代にも、ジャンクション絡みでバグに近い仕様制限があったような記憶が残ってますが、Windows 7 の時代になっても特に変わってないのかもしれません。 ジャンクション機能を使ってディスク・ボリュームをマウントする http://www.atmarkit.co.jp/fwin2k/win2ktips/985junction/junction.html

その他の回答 (3)

noname#110816
noname#110816
回答No.4

誤解を招くといけませんので補足しました。 > (下記のoptionは関係ないです) フォルダ、サブフォルダも処理対象にする場合は /s は関係します。 システムファイル、隠しファイルも処理対象にする場合は /h は関係します。 > xcopyの仕様に忠実に xcopyはファイルcopyにoptionを付与したツールですので、ファイルを基本としてフォルダ、サブフォルダをoptionとして処理対象に加える、という考え方です。 仕様にもコピー元は「ファイル」となっています。 したがって、xcopy d:\ ではドライブを指定した記述になってしまって、保証できない動作をしているものと思われます。 このため、異常な動作のため C:\cackup へのドライブパスも消され、アイコンもフォルダアイコンに戻されたものと思われます。

YoshiakiKun
質問者

お礼

 ありがとうございます。  コピー元の指定に *.* を付けたところ、ジャンクションの強制削除は起きなくなったぽいです。  が、やっぱジャンクション自体が消えてしまう、ってのは問題だと思いますネ。  OS(ファイルシステム)のレベルで提供しているジャンクション機能が、コマンドプロンプトで動作する単純なファイルコピーソフトに壊されてしまう、ってのは、かなりの脆弱性を感じます。。。  Win7 になってもマイクロソフトはハードリンクに関わるコードをうまく組み込めなかったのかなぁ~と。

noname#110816
noname#110816
回答No.3

私の場合は何度行なっても納得できる動作をします。(追記参照) ただし、Win7 Ultimate 32bit 環境です。 64bitでは試していませんがおそらくxcopyの機能は同じなのでは?。 "YoshiakiKun"さんと異なる部分は、 コピー元を下記のように xcopyの仕様に忠実に実行したことです。(下記のoptionは関係ないです) xcopy d:\*.* c:\backup /s /h /y ---追記 納得できる操作とは... 1. c:\backupとして作成したフォルダはボリューム(ドライブ)に割り当てた時点で、フォルダの種類は「マウントされたフォルダ」になる。 2. c:\backupのアイコンはショートカット表示のリンクフォルダであり、リンク先名は(1)のボリュームである。 3. c:\backupフォルダにxcopyを行なった後でも、上記(1)(2)の状況は変わらない。(アイコン表示図柄も変わらない) 4. c:\backupフォルダは普通のフォルダとなんら変わりなく、フォルダへのコピーや削除などを行なうことができる。 5. 上記の状況なので、ドライブCを拡張したのと同じ使用方法が出来る。(目的通りの使用) 6. 割り当てたボリューム(ドライブ)を削除すると、c:\backupは当初作成した普通のフォルダ表示に戻る。(フォルダの種類は「ファイルフォルダー」となる)

YoshiakiKun
質問者

お礼

 ありがとうございます。  D:\ のルートからのコピーに /h 付けると、ゴミ箱とかをコピーしようとしてきますネ。 robocopy d:\ c:\backup /s /purge /copyall /xd "System Volume Information" "$RECYCLE.BIN" /r:3 /w:3 /dcopy:T としたら、なぜかコピー後に c:\backup (マウントしたHDD)にシステム属性が付いてしまい、非表示になる動作になりました。  バックアップのフェルダは非常時以外は隠れていた方が都合がいい、という話もあるのですが、 robocopy d:\data c:\backup\data /s /purge /copyall /xd "System Volume Information" "$RECYCLE.BIN" /r:3 /w:3 /dcopy:T という風に、ルートの下層にあるフォルダを指定することで、普通にコピーできるようになりました。  ちなみに「/dcopy:T」に感動したことは言うまでもありません(笑)  以上、検索エンジンで辿り着いた方むけに、余計なことも書かせて頂きました。

回答No.1

試してみました。 "論理ディスクマネージャ"ってなんのことだろう、と思ったら、 コンピュータの管理>ディスクの管理 の事ですね。 そこでドライブを選択して「ドライブ文字とパスの変更」から、C:\Backupを追加する、 つまり、ジャンクション機能を使って新しく追加したドライブをC:\Backupにマウントする、ということでいいですね? 当方でもお書きになった通りのオプションを付加( /I にどういう意味があるのかわからないのですが)してXCOPYを試したら、ジャンクションが消えました。 普通のフォルダに戻って、その中にコピーされます。 それだけじゃなく、マウントしたドライブ側のアクセス権が全部吹っ飛んじゃったんで焦りました。 > この XCOPY の動作って変じゃないですか? 変ですね。 > 私の Win7 だけで起きる現象なんでしょうか?? 当方でもそうなります。 つまり、(バグやエラーではなく)仕様、ということかもしれません。 ところで、xcopyでないといけないのですか? robocopyは使えないのでしょうか? robocopy d:\ c:\Backup /E /R:1 /W:1 あたりでいかがでしょう?

YoshiakiKun
質問者

お礼

ありがとうございます。 論理ディスクマネージャ、XPまでの用語だったぽいです、すみません。 アクセス権が吹っ飛ぶ、ってのは気がつきませんでした。 (フォーマットしたディスクを使ってたので・・・) robocopy は初めて知りました。 ちょっと勉強してみます。

YoshiakiKun
質問者

補足

下の「この回答へのお礼」を書いた後で書いてます。 robocopy に感動しました(笑) xcopy のように ドライブパスを勝手に消すような挙動もないし、なんで今まで xcopy なんか使ってたんだろ、と思うくらいのものですネ DOS の時代に zcopy を喜んで使ってた身としては、何の迷いもなく xcopy 一択でしたもので。。。

関連するQ&A

  • XCOPYのショートカットが作れない XP

    マイドキュメントをD:に移しています。コピー元 D:\マイドキュメント コピー先 E:\Backup\マイドキュメントです。 ショートカット作成画面で XCOPY"D:\マイドキュメント""E:\Backup\マイドキュメント"/e/d/h/r/y と入力すると 「ファイルC:XCOPY"D:\マイドキュメント""E:\Backup\マイドキュメント"/e/d/h/r/yが見つかりません」と出ます。

  • コマンドプロンプトでのxcopyコマンドについて

    知り合いのPCが起動しなくなったので、個人データだけバックアップをしてほしいと頼まれました。 USB接続できる変換アダプタで、起動しないHDDを私のPCにUSB接続し、ドラッグで私のPCへコピーしようとすると、アクセス権の関係でコピーできません。 ネットで調べてみるとコマンドプロンプトのxcopyという方法でアクセス権を変えずにコピー出来そうなことが書かれていましたが、コマンド入力が間違っているようで、エラーでコピーできません。 どなたかコマンドを教えて頂けないでしょうか。 起動しないHDDはWindows XP(NTSF形式)です。 私のPCはVista(NTSF形式)です。 コピーしたい個所はDocuments and Settings内のユーザー名(漢字)フォルダ内すべてです。 コピー先は私のDドライブ内のBackupフォルダ内です。 起動しないHDDはJドライブで認識していますので xcopy J:\Documents and Settings\ユーザー名(漢字) D:Backup /o とすると「無効なパラメーターの数です」と出ます。 copyとJの間、Documents and Settingsのandの両サイド、(漢字)とDの間、Backupと/の間は半角スペースを入れています。 コマンドプロンプト初心者ですので、よろしくお願いします。

  • XCOPYコマンドについて。

    マシンAのdドライブのファイルAをマシンBのCドライブ配下にコピーしたいのですが、 そのときのxcopyのコマンドを教えてください。。

  • DOSのXCOPYの使い方を教えて下さい

    XCOPYでドライブのフォルダーとファイルを全てコピーしようとしてます。深夜にスケジュールにて実行する予定でオペレーター介入が不可能です。 XCOPY e:\* d:\SERVER2\BACKUP /EYC で実行すると *********************************** C:\>xcopy d:* gsfhp_bk /EY gsfhp_bk は受け側のファイル名です またはディレクトリ名ですか (F= ファイル、D= ディレクトリ)? *********************************** とオペレーター介入を要求してきます何とかなら無いでしょうか?

  • 受け取りフォルダ名を指定しないXCOPYはできる?

    タイトルのとおり、受け取りフォルダ名を指定しないXCOPYの方法を模索しています。 例: C:¥ProgramSourceディレクトリの内容をD:¥BACKUPフォルダにコピーしたい。   C:¥ProgramSourceの中身がA.c, B.Hという2つのファイルが存在するときには、D:¥BACKUPフォルダ内に   D:¥BACKUP¥ProgramSource¥A.c   D:¥BACKUP¥ProgramSource¥B.H   というファイルを作りたいのです。 通常であれば、XCOPY /S/E/I C:¥ProgramSource¥*.* D:¥BACKUP¥ProgramSource¥*.* でコピーできるのですが、この方法だと間違えて受け取りフォルダ名をD:¥BACKUP¥PROGRAMSOURCE¥*.* と書いてしまうとターゲットが大文字になってしまいます。 どうにか送り側のフォルダ名を使うことはできないでしょうか? ※/と¥は文字化けするかもしれないので、全角文字で書いています。

  • xcopyのバッチを組みたいです。

    xcopyのバッチを組みたいです。 例えば、c:\data というフォルダを、 d:\test というフォルダ内にxcopyコマンドを使って コピーするとします。 コピー終了した時間を何らかの形で知りたいです。 (実際のデータをコピーするのに、相当時間が かかりそうなので、ずっと見ているわけに いかないのです) 上記のことをやろうと思ったら、バッチを組めば いいと聞いたのですが、そもそもバッチを組むと いうのはどうすればいいんでしょうか。 テキストデータで構文を書いて、拡張子をbatに しておけばいいものなんでしょうか。 また、その構文はどう書けばいいのでしょうか。 以上、どなたか教えてください。 よろしくお願いします。

  • DOSコマンドのxcopy

    お世話になります。 DOSコマンドで cドライブのtmp1の下のデータを BBBフォルダーごと cドライブのtmp2の下にBBBフォルダーとして ディレクトリーごとコピーしたいのですが うまくいきません どなたかおわかりになりましたら お願いいたします。 ↓これだとうまくいきませんでした xcopy c:\tmp1\BBB c:\tmp2\ OS=Win7(64bit)

  • xcopyでCDにコピー

    出力先がハードディスクの場合はコピーされるのですが、 xcopy C:\Test\*.* D:\ /e /c /h /y 出力先がCD-Rのドライブだとコピーが出来ません…ご教授下さい。 xcopy C:\Test\*.* F:\ /e /c /h /y ↓次のメッセージが表示される 無効なドライブ指定です 0 個のファイルをコピーしました

  • xcopyコマンドを使ってのバックアップ

    NTの端末から2003serverへネットワーク経由でバックアップするbatファイルを作成しています。作成したのが、 xcopy D:\* \\2003server\***\*** /D /S /E /C /F /R /X /Y > C:\ファイルバックアップ.log NT端末のDドライブ配下の全てのフォルダ・ファイルをコピーしたいと考えてますがうまくいきません。アカウント・アクセス権等は問題ないのでオプションなどの問題かなと・・・。どなたか分かるかたいらっしゃいましたらお願い致します。

  • ファイルのコピー

    xcopy コマンドを用いて c:\work フォルダ内に  data_backup.1,data_backup.2,~data_backup.31 と data_backup.日付 のファイルがあります これを d:\keep フォルダに本日のファイルのみをコピーする  例 03/11/28の場合、data_backup.28 バッチファイルを教えてください