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
です
C:\destinationfolder
を指定して、宛先フォルダー.
で実行しようとしましたxcopy
を繰り返し呼び出すスクリプトがあるので、ディレクトリ構造なしでC:\destinationfolder\many Java files
が残っています。
A.はい、すべてのオプションを表示するためにxcopy /?
を実行しました
B. /T
も空のディレクトリ構造を作成しません
C.ソースフォルダーa\b\c\d\
に移動してxcopy . <dest>
を実行できない
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
。
問題は、ソースにコピーするファイルを指定していることです。この場合、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を実行し、ファイル名の最後にワイルドカードを追加して、フォルダ構造を作成します。
私はここでそれを仮定しています:
FOR
コマンドで使用できます。次の形式も使用できます。
FOR /F "tokens=* delims=," %F in ('cmd') DO xcopy src\%~nxF* .\dest /S /Y
ここでcmdは、コピーするファイルのリストを生成するために使用するコマンドで置き換える必要があります。
このFOR
コマンドをバッチファイルで使用する場合は、_%F
_を_%%F
_(および_%~nxF*
_を_%%~nxF*
_に)置き換える必要があります。
Xcopyスイッチを確認したところ、/ Tでディレクトリ構造をコピーできますが、空のディレクトリはコピーされないため、/ Eでこれを上書きできます。したがって、コマンドは次のようになります。
xcopy C:\sourcefolder\a\b\c\d\something.Java C:\destinationfolder /T /E /S /Y
お役に立てれば!
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の下に他のファイル(およびフォルダー)がある場合、それらもコピーされます。
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の後続の実行で機能するため、これは特権の問題が原因であると思います。
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.Java
をC:\destinationfolder\oops\something.Java
にコピーし、something*.Java
の下にあるC:\sourcefolder\
の他の一致もコピーするという副作用があることに注意してください。