我在Windows XP Professional中对xcopy有一个奇怪的问题。我不知道它是否是一个愚蠢的问题,因为我只指定一个文件作为源,所以我是否应该期待任何其他行为?就是这样:
我正在使用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
没有任何目录结构。
一个。是的,我已经xcopy /?
查看了所有选项
B中。 /T
也不会创建任何空目录结构
℃。我无法访问源文件夹a\b\c\d\
并运行xcopy . <dest>
答案 0 :(得分:8)
我删除了之前使用ROBOCOPY
的答案。我相信以下内容将使用XCOPY
执行您想要的操作。
假设您的文件夹结构如下:
SOURCE = C:\MyJavaStuff\A\B\C\D\something.java
DEST = C:\MyDestination
像这样运行XCOPY
:
XCOPY C:\MyJavaStuff\something*.java C:\MyDestination /S /E
请注意*
中的something*.java
。
答案 1 :(得分:3)
问题是您要指定要在源中复制哪个文件。在这种情况下,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*
)。
答案 2 :(得分:2)
我查看了xcopy开关,您可以使用/ T复制目录结构,虽然这不会复制空目录,您可以用/ E覆盖它。所以你的命令看起来像这样:
xcopy C:\sourcefolder\a\b\c\d\something.java C:\destinationfolder /T /E /S /Y
希望这有帮助!
答案 3 :(得分:1)
为了得到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\
的任何其他匹配。
答案 4 :(得分:1)
我使用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上的后续运行中起作用。
答案 5 :(得分:1)
在我看来,xcopy通常用于复制目录树,而不是单个文件(尽管它可以工作)。并且,xcopy将在 target 文件夹中 source 文件夹下的 下重新创建目录结构。如果为xcopy提供了/ i开关,则将 target 文件夹假定为目录。即使不存在多个父项,也要创建它。
您有C:\ MyJavaStuff \ A \ B \ C \ D \ something.java-这是您的源。您想要得到一个something.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下还有其他文件(和文件夹),它们也将被复制。