- ベストアンサー
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 だけで起きる現象なんでしょうか??
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
xcopyはスペック通りに機能しているのではないでしょうか。 今回の事例に限っては /i option の使いかたに起因しているような気がします。 /i をカットして、xcopyが確認要求してきた場合に「 d 」で応えてはどうでしょうか。 > C:\Backup じゃなくて、E: 等の普通のドライブレターに割り当てて、XCOPY ~ もそれに準じて書き換えて実行しますと、所望の動作をしてくれます。 これも /i option がスペック通りに機能しているからでしょう。 以上です。
その他の回答 (3)
誤解を招くといけませんので補足しました。 > (下記のoptionは関係ないです) フォルダ、サブフォルダも処理対象にする場合は /s は関係します。 システムファイル、隠しファイルも処理対象にする場合は /h は関係します。 > xcopyの仕様に忠実に xcopyはファイルcopyにoptionを付与したツールですので、ファイルを基本としてフォルダ、サブフォルダをoptionとして処理対象に加える、という考え方です。 仕様にもコピー元は「ファイル」となっています。 したがって、xcopy d:\ ではドライブを指定した記述になってしまって、保証できない動作をしているものと思われます。 このため、異常な動作のため C:\cackup へのドライブパスも消され、アイコンもフォルダアイコンに戻されたものと思われます。
お礼
ありがとうございます。 コピー元の指定に *.* を付けたところ、ジャンクションの強制削除は起きなくなったぽいです。 が、やっぱジャンクション自体が消えてしまう、ってのは問題だと思いますネ。 OS(ファイルシステム)のレベルで提供しているジャンクション機能が、コマンドプロンプトで動作する単純なファイルコピーソフトに壊されてしまう、ってのは、かなりの脆弱性を感じます。。。 Win7 になってもマイクロソフトはハードリンクに関わるコードをうまく組み込めなかったのかなぁ~と。
私の場合は何度行なっても納得できる動作をします。(追記参照) ただし、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は当初作成した普通のフォルダ表示に戻る。(フォルダの種類は「ファイルフォルダー」となる)
お礼
ありがとうございます。 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」に感動したことは言うまでもありません(笑) 以上、検索エンジンで辿り着いた方むけに、余計なことも書かせて頂きました。
- softbankHawks
- ベストアンサー率66% (1057/1598)
試してみました。 "論理ディスクマネージャ"ってなんのことだろう、と思ったら、 コンピュータの管理>ディスクの管理 の事ですね。 そこでドライブを選択して「ドライブ文字とパスの変更」から、C:\Backupを追加する、 つまり、ジャンクション機能を使って新しく追加したドライブをC:\Backupにマウントする、ということでいいですね? 当方でもお書きになった通りのオプションを付加( /I にどういう意味があるのかわからないのですが)してXCOPYを試したら、ジャンクションが消えました。 普通のフォルダに戻って、その中にコピーされます。 それだけじゃなく、マウントしたドライブ側のアクセス権が全部吹っ飛んじゃったんで焦りました。 > この XCOPY の動作って変じゃないですか? 変ですね。 > 私の Win7 だけで起きる現象なんでしょうか?? 当方でもそうなります。 つまり、(バグやエラーではなく)仕様、ということかもしれません。 ところで、xcopyでないといけないのですか? robocopyは使えないのでしょうか? robocopy d:\ c:\Backup /E /R:1 /W:1 あたりでいかがでしょう?
お礼
ありがとうございます。 論理ディスクマネージャ、XPまでの用語だったぽいです、すみません。 アクセス権が吹っ飛ぶ、ってのは気がつきませんでした。 (フォーマットしたディスクを使ってたので・・・) robocopy は初めて知りました。 ちょっと勉強してみます。
補足
下の「この回答へのお礼」を書いた後で書いてます。 robocopy に感動しました(笑) xcopy のように ドライブパスを勝手に消すような挙動もないし、なんで今まで xcopy なんか使ってたんだろ、と思うくらいのものですネ DOS の時代に zcopy を喜んで使ってた身としては、何の迷いもなく xcopy 一択でしたもので。。。
お礼
ありがとうございます。 オプション類を最小限にしてみました。 xcopy d:\ c:\backup /s これでも、ドライブパスが消えます。 エクスプローラか何かで C:\Backup の中を開いておけば、削除されませんが、それは排他エラーに引っかかってドライバパスの削除失敗になってるだけなので。。。 コピーされないとか、そういう挙動ならば理解できるのですが、ドライブパスを勝手に消してしまうのは、下の方が書かれたアクセス権も勝手に消してしまう、と併せて仕様というよりもバグだと思いたいものです。 NT4 の時代にも、ジャンクション絡みでバグに近い仕様制限があったような記憶が残ってますが、Windows 7 の時代になっても特に変わってないのかもしれません。 ジャンクション機能を使ってディスク・ボリュームをマウントする http://www.atmarkit.co.jp/fwin2k/win2ktips/985junction/junction.html