ディレクトリ全体(ディレクトリフォルダを含む)を別のディレクトリにコピーするためのコマンドラインコマンド


59

コマンドラインを使用して、あるディレクトリを別のディレクトリにコピーしたいのですが。例えばディレクトリがあります C:/test そして C:/test2

コピーしたい C:/testC:/test2 結果がになるように C:/test2/test

これまでに見つけたものはすべて、に含まれているファイルとフォルダだけをコピーします。 C:/testC:/test2ただし、親ディレクトリは除外されます。


1
xcopyを使ってみる

回答:


47

使ってみる XCOPY とともに /E スイッチ。より詳しい情報 ここに

私は私の脳からこの情報にアクセスする必要はありませんでした

更新

ドキュメントには、ソースディレクトリからすべてのファイルとサブディレクトリがコピーされる(つまり、親ディレクトリは作成されない)と書かれているので、作成する必要があります。 testC:\test2 最初に使用してから使用する XCOPY


2
Xcopyの '/ T'スイッチはディレクトリを作成します。ファイルを含まないサブディレクトリ構造のコピー
mfg

2
より良い使い方 robocopy /CREATE /COPYALL /DCOPY:T src dst フォルダと空のファイルをコピーするだけで、すべてのタイムスタンプとその他の属性を保持します。
user1016274

2
フォルダのため、実際にはこれは質問に対する回答を提供しません。 test まだ作成する必要があります。
IGRACH

1
@IGRACHと思った md test そしてそれから xcopy 自明のことでした。
vivin

1
さて質問は copy フォルダは新しいフォルダを作成せず、その中のコンテンツをコピーします。
IGRACH

30
xcopy c:\test c:\test2\test /s /e /h

これがXCOPYの情報です[ 1 2 ]


2
入力を求められないようにするにはどうすればよいですか。
YumYumYum

2
@YumYumYum:/ Iスイッチを使用することができます。
Thijs Tijsma

14

バックアップスクリプトを作成する場合は、ROBOCOPYを使用してください。 xcopyは廃止予定であり、近い将来使用されなくなる可能性があります。 robocopyはxcopyができることすべてを実行できます。それはまたより柔軟で信頼性があります。 robocopyを使ってスクリプトを作成することは、将来的にそれらを証明するでしょう。


  1. robocopyを使用して簡単にフォルダをコピーするrobocopyコマンドは、xcopyコマンドに代わるものです。内容の定義を気にせずにフォルダ全体をすばやくコピーできます。たとえば、C:\ toolsディレクトリのすべての内容を新しいフォルダD:\ backup \ toolsにコピーするには、次のように入力します。

    robocopy C:\tools D:\backup\tools /e
    

    / e修飾子は、robocopyにすべてのサブディレクトリを含めるように指示します。これには空のフォルダも含まれます。 robocopyは自動的に隠しファイルとシステムファイルをコピーします。それらがターゲットの場所に存在しない場合、それは新しいディレクトリを作成します。

  2. ディレクトリをミラーリングします。ディレクトリをミラー化することは、バックアップを作成するのに最適です。 robocopyのミラーオプションは、コピー元からコピー先にすべての内容をコピーします。それはそれからソースで存在しない目的地で何かを削除します。これにより、バックアップに最新バージョンのファイルのみが含まれるようになります。たとえば、C:\ Users \ My DocumentsをD:\ backup \ My Documentsにミラーリングするには、次のように入力します。[4]

    robocopy "C:\Users\My Documents" "D:\backup\My Documents" /mir
    

    この機能はオリジナルファイルの全てのパーミッションを保存します。

  3. 再起動を有効にします。接続がコピーの途中で切断された場合に備えて、プロセスを再開する機能を含めることができます。

    robocopy "C:\Users\My Documents" "D:\backup\My Documents" /z
    
  4. コピー処理をログに記録します。 robocopyを使用すると、ログファイルを作成できます。これにより、問題を特定したり、コピーされた内容のアーカイブを生成したりできます。

    robocopy "C:\Users\My Documents" "D:\backup\My Documents" /log+:<filename>.txt
    

    / log +修飾子は既存のログファイルを上書きするのではなく追加します。古いログファイルを上書きするだけの場合は、/log:.txtを使用します。


8

私はお勧め ロボコピー オーバー xcopy タイムスタンプをそのままにしておくことを含む、もっと多くの選択肢があるので、それは私が不可欠だと思う。

RobocopyはXP / 2003に追加される必要があります、しかしそれはVista以降の標準です。

私は実際にいつも使う xxcopy しかし、64ビット版は無料ではありません。


1
robocopy Windowsプログラムです。問題はDOSについてでした。
grawity

8
@実力:実世界で一般的であるように、彼がCMDを 'DOS'と呼ぶ可能性が高いのに比べて、彼が実際に16ビットDOSを使う可能性は非常に小さいです。
paradroid

本当の質問は:robocopyはMicrosoftのプログラムなのか?
knocte

@ knocteはい、そうです
yossico


2

最初の質問が私がそれに対する答えを探していたものであるならば、私は、そして明らかに上記の誰も、明確な解決策を思い付いていません。

私が探しているのは、テストディレクトリをもう一度入力しなくてもtest2ディレクトリにコピーすることです。何かのようなもの

xcopy /isvy c:\test d:\test2

どこで d:\test2\test コピーの前には存在しませんが、後には存在します。これにより、宛先パスで2回目のタイプミステストを省くことができます。上記のコマンドはすべてのファイルとディレクトリをtest2にコピーしますが、testディレクトリは作成しません。

これまでのところ

xcopy /isvy c:\test d:\test2\test

この仕事をやり遂げるために私が見つけたのは本当に唯一の方法です。入力の問題がある場合も、ソースディレクトリと宛先ディレクトリが一致するという保証はありません。

これを修正する別の方法は

set mydir=test&&xcopy /isvy c:\%mydir% c:\test2\%mydir%

これはコピー先ディレクトリを設定します。 mydir その後、variableは送信元パスと送信先パスの両方でその変数を使用します。あなたが間違った変数をタイプするならば、あなたはエラーを得るか、あるいは行き先ディレクトリはおそらく持っているでしょう % 始めと終わりに。

入力するのは長くなりますが、間違った名前を付ける可能性は低くなります。それらは目立つでしょう。


実際には xcopy /ievy c:\test d:\test2\test ディレクトリツリー構造を維持するため set mydir=test&xcopy /isvy c:\%mydir% c:\test2\%mydir% たった1つ &amp; 値を設定した結果は常に成功するので十分です。
NetwOrchestration

0
xcopy SWITCHES SOURCE DESTINATION

どこで SWITCHES することができます:

  • ディレクトリ構造全体をコピーするには

    /hiev

  • 保存先のファイルを上書きするには(保存先フォルダがすでに存在する場合):

    /hievry

  • ACL +属性で上書きコピーするには:

    /hievxok

あなたのケースに最適です:

xcopy /hievry C:\test C:\test2\test


0

フォルダー名を含む多数のフォルダーをコピー先の場所にコピーする必要があるという同様の状況がありました。この質問に「回答済み」のマークが付いていれば助かりますが、実際にはそうではありません。

まず、この機能が必要になることが確実にあり、C:\ Windows \ Assembly \ GAC_MSILからフォルダーをコピーしなければならなかったときに私は1つに遭遇しました。 Windowsエクスプローラはこのフォルダの表示を拒否しているので、コマンドプロンプトを使用する必要があります。

GACフォルダに精通している場合は、フォルダ名は重要ではなく、誤入力しても間違えやすいということをご存知でしょう。

そのため、ディレクトリを事前に作成することは、スクリプトを使用しない限り、実際には選択肢になりません。これが唯一の本当の解決策なので、これを使用してしまいました。

まずコピーしたいフォルダを一時ファイルにダンプします。これは通常いくつかのパターンに基づいています。

dir /B policy* > Folders.txt

その後、ダンプ内のエントリーをループして宛先にコピーします。 destination引数をバックスラッシュ(\)で終了すると、Xcopyはフォルダを作成します。

for /F "tokens=*" %%A in (Folders.txt) do xcopy /E /S %%A C:\Dest\%%A\

これら両方のコマンドをバッチファイルに入れて実行します。

xcopyかrobocopyだけがこれを組み込んでいるなら今。


0

XCOPYソースドライブ:宛先ドライブ:/ S / E


スーパーユーザーへようこそ!これを説明できますか? (特に /S /E フラグ)
bertieb

0

私はあなたの質問に対して機能的な代替回答を見つけました。

まず、 FORFILES/S パラメータ、その中のすべてのサブディレクトリに C:\test に達するでしょう。

次に、と /C パラメータを指定すると、ネイティブ変数で一連のコマンドを開始することができます。これにより、宛先に同一のディレクトリを作成し、2つの条件付き構造を使用してファイルをその内部にコピーできます。

最初の条件付き構造 @isdir==TRUE (必ず大文字を使用してください)、ソースからのみディレクトリを取得し、そして運命にそれらを作成することができます MKDIR [path]\@relpath 最後に。

最後に、2番目のものはそれだけでファイルを扱っていることを確認します @isdir==FALSEその後、COPYコマンドは単にジョブを完了させ、すべてのファイルをFORFILESコマンドで到達させて設定します。 [path]@relpath 保存先として、作成したばかりのディレクトリ内にファイルをコピーします。

forfiles /s /c " cmd /c ( if @isdir==TRUE mkdir C:\test\@relpath ) && ( if @isdir==FALSE copy @file C:\test2\@relpath)"

それがこの辺のみんなに役立つことを願っています。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.