webdevqa.jp.net

xcopyはディレクトリ構造を作成しません

Windowsのxcopyに奇妙な問題がありますXP Professional。ソースとしてファイルのみを指定しているので、それが愚かな質問かどうかわからないので、他の動作も予想されますか? ? これだよ:

xcopy <src> <dest> /s/yを使用しています。

<src>=C:\sourcefolder\a\b\c\d\something.Javaおよび

<dest>=C:\destinationfolder

これでxcopyはファイルをコピーしますが、\a\b\c\d\内にC:\destinationfolderのディレクトリ構造を作成しません。

私が欲しいのはC:\destinationfolder\a\b\c\d\something.Java

私が得るものはC:\destinationfolder\something.Javaです


  1. ターゲットフォルダーにC:\destinationfolderを指定して、宛先フォルダー.で実行しようとしました
  2. 上記のターゲットなしで試した

xcopyを繰り返し呼び出すスクリプトがあるので、ディレクトリ構造なしでC:\destinationfolder\many Java filesが残っています。

A.はい、すべてのオプションを表示するためにxcopy /?を実行しました

B. /Tも空のディレクトリ構造を作成しません

C.ソースフォルダーa\b\c\d\に移動してxcopy . <dest>を実行できない

13
Pulak Agrawal

更新

ROBOCOPYの使用に関する以前の回答を削除しました。私は以下がXCOPYを使ってあなたがやりたいことをすると信じています。

あなたのフォルダ構造が次のようであると仮定します:

SOURCE = C:\MyJavaStuff\A\B\C\D\something.Java
DEST   = C:\MyDestination

次のようにXCOPYを実行します。

XCOPY C:\MyJavaStuff\something*.Java C:\MyDestination /S /E

* in something*.Java

8
aphoria

問題は、ソースにコピーするファイルを指定していることです。この場合、xcopyはフォルダー構造を作成しません。ただし、xcopyの呼び出しを次のように変更した場合

_xcopy *.Java C:\myfolder /s/y_

.Javaファイルとフォルダ構造もコピーされます。この呼び出しを希望どおりに機能させるには、ワイルドカードを指定する必要があります。特定のファイルのみをコピーする場合は、xopyの呼び出しを調整する必要があります。例:

_xcopy something.jav* C:\myfolder /s/y_

編集する

別のコマンドからコピーするファイルのリストを取得するとします。このファイルのリストをテキストファイルに出力できる場合は、次の操作を実行できます。

FOR /F "tokens=* delims=," %F in (d:\test\list.txt) DO xcopy src\%~nxF* .\dest /S /Y

このコマンドが行うことは、テキストファイル(この場合は "d:\ test\list.txt")を読み取り、すべての行を読み取って、各ファイルに対してxcopyを実行し、ファイル名の最後にワイルドカードを追加して、フォルダ構造を作成します。

私はここでそれを仮定しています:

  • ファイル名(およびパス)のみを含むテキストファイルでファイルのリストを取得できます。
  • ソースフォルダー(例では "C:\ sourcefolder"、フォルダー構造 "a\b\c\d"は既知である必要はありません)がわかっていて、FORコマンドで使用できます。

次の形式も使用できます。

FOR /F "tokens=* delims=," %F in ('cmd') DO xcopy src\%~nxF* .\dest /S /Y

ここでcmdは、コピーするファイルのリストを生成するために使用するコマンドで置き換える必要があります。

このFORコマンドをバッチファイルで使用する場合は、_%F_を_%%F_(および_%~nxF*_を_%%~nxF*_に)置き換える必要があります。

3
Laf

Xcopyスイッチを確認したところ、/ Tでディレクトリ構造をコピーできますが、空のディレクトリはコピーされないため、/ Eでこれを上書きできます。したがって、コマンドは次のようになります。

xcopy C:\sourcefolder\a\b\c\d\something.Java C:\destinationfolder /T /E /S /Y

お役に立てれば!

2
Bali C

Xcopyは通常、単一のファイルではなくディレクトリツリーのコピーに使用されているように見えます(機能しますが)。そして、xcopyはtargetフォルダー内のディレクトリ構造ndersourceフォルダーを再作成します。 xcopyに/ iスイッチが指定されている場合、targetフォルダーはディレクトリーと見なされます。作成する必要がある親が複数ある場合でも、存在しない場合は作成されます。

C:\ MyJavaStuff\A\B\C\D\something.Java-sourceです。あなたは何かで終わりたいと思っています.JavaはC:\ destinationfolderではなくC:\ destinationfolder\A\B\C\Dにあるので、それがあなたのtargetです。 C:\ destinationfolderもありません。/iを指定すると、パス全体が作成されます。

xcopy /i c:\MyJavaStuff\A\B\C\D\something.Java C:\destinationfolder\A\B\C\D

Something.JavaがC:\ MyJavaStuffの下の唯一のファイルである場合は、

xcopy /sei c:\MyJavaStuff C:\destinationfolder

これでツリー構造全体が再作成され、ファイルがコピーされます。しかし、MyJavaStuffの下に他のファイル(およびフォルダー)がある場合、それらもコピーされます。

1
John Elion

Xcopyを使用して非常によく似たバッチファイルを作成しました。おそらく、私がしたことはあなたを助けるでしょう。

これは私が使用したコマンドです:

xcopy "c:\Data Files\Dave's Data\*.*"   "m:\Dave's Data"      /R/D /E/H

この場合、ソース上のDaveのデータには、少なくとも50,000個のファイルと75GBを超えるデータを含むディレクトリツリー全体が含まれています。 Windows XPで完全に動作します

ディレクトリツリーがコピーされるため、/Tは不要であることがわかりました。空のディレクトリを含む/Sがディレクトリとサブディレクトリをコピーしたため、/Eは不要であることもわかりました。コピー先の読み取り専用ファイルをコピーして上書きするために/Rを含めました。 /Hが隠しディレクトリをコピーしました。 /Dは新しいファイルのみをコピーしました。私はこれをデータの毎日のバックアップツールとして使用しています。

私が抱えている唯一の問題は、このコマンドがWindows 7で初めて機能する一方で、宛先ディレクトリツリーが存在する場合、以降の実行では機能しないことです。 xcopyコマンドがcmd.exeウィンドウ内のWindows 7の後続の実行で機能するため、これは特権の問題が原因であると思います。

1
DWN1952

C:\destinationfolder\a\b\c\d\something.Javaを取得するには、XCOPYは複製するC:\sourcefolder\a\b\c\d\something.Javaの量を知る必要があります。

以下を使用できます。

C:
cd \sourcefolder
XCOPY something.Java* C:\destinationfolder\ /S

これには、C:\sourcefolder\oops\something.JavaC:\destinationfolder\oops\something.Javaにコピーし、something*.Javaの下にあるC:\sourcefolder\の他の一致もコピーするという副作用があることに注意してください。

1
Alan