Batch file xcopy不创建目录结构
我在Windows XP Professional中遇到了一个奇怪的xcopy问题。我不知道这是否是一个愚蠢的问题,因为我只指定了一个文件作为源,所以我甚至应该期待任何其他行为?就是这样: 我正在使用Batch file xcopy不创建目录结构,batch-file,windows-xp,copy,xcopy,Batch File,Windows Xp,Copy,Xcopy,我在Windows XP Professional中遇到了一个奇怪的xcopy问题。我不知道这是否是一个愚蠢的问题,因为我只指定了一个文件作为源,所以我甚至应该期待任何其他行为?就是这样: 我正在使用xcopy/s/y =C:\sourcefolder\a\b\C\d\something.java和 =C:\destinationfolder 现在xcopy复制文件,但不在c:\destinationfolder内创建目录结构\a\b\c\d\ 我想要的是C:\destinationfolder
xcopy/s/y
=C:\sourcefolder\a\b\C\d\something.java
和
=C:\destinationfolder
现在xcopy
复制文件,但不在c:\destinationfolder
内创建目录结构\a\b\c\d\
我想要的是C:\destinationfolder\a\b\C\d\something.java
和
我得到的是C:\destinationfolder\something.java
C:\destinationfolder
中运行它,方法是为目标文件夹指定
xcopy
,因此我只剩下C:\destinationfolder\many java文件
,没有任何目录结构
A.是的,我已完成xcopy/?
查看所有选项
B./T
也不会创建任何空目录结构
C.我无法转到源文件夹a\b\C\d\
并运行xcopy代码>更新
我删除了我以前关于使用ROBOCOPY
的回答。我相信以下内容将使用XCOPY
实现您想要的功能
假设您的文件夹结构如下所示:
SOURCE = C:\MyJavaStuff\A\B\C\D\something.java
DEST = C:\MyDestination
XCOPY C:\MyJavaStuff\something*.java C:\MyDestination /S /E
xcopy C:\sourcefolder\a\b\c\d\something.java C:\destinationfolder /T /E /S /Y
像这样运行XCOPY
:
SOURCE = C:\MyJavaStuff\A\B\C\D\something.java
DEST = C:\MyDestination
XCOPY C:\MyJavaStuff\something*.java C:\MyDestination /S /E
xcopy C:\sourcefolder\a\b\c\d\something.java C:\destinationfolder /T /E /S /Y
请注意something*.java
中的*
问题在于您正在指定要在源代码中复制的文件。在这种情况下,xcopy不会创建文件夹结构。但是,如果您将对xcopy的调用更改为
xcopy*.javac:\myfolder/s/y
它还将复制.java文件和文件夹结构。您需要为此调用指定一个通配符才能正常工作。如果只想复制特定文件,则必须调整对xopy的调用,例如:
xcopy something.jav*C:\myfolder/s/y
编辑
您说您从另一个命令获取要复制的文件列表。如果可以在文本文件中输出此文件列表,则可以执行以下操作:
FOR/F“tokens=*delims=,%F在(d:\test\list.txt)中执行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需要替换为用于生成要复制的文件列表的命令
请注意,如果在批处理文件中对
命令使用此,则需要将%F
替换为%F
(将%~nxF*
替换为%~nxF*
)。我查看了xcopy开关,您可以使用/T复制目录结构,尽管这不会复制空目录,但您可以使用/E覆盖它。因此,您的命令如下所示:
SOURCE = C:\MyJavaStuff\A\B\C\D\something.java
DEST = C:\MyDestination
XCOPY C:\MyJavaStuff\something*.java C:\MyDestination /S /E
xcopy C:\sourcefolder\a\b\c\d\something.java C:\destinationfolder /T /E /S /Y
希望这有帮助 为了获得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
以及C:\sourcefolder\下的something.java
的任何其他匹配项。也许我所做的会帮助你
这是我使用的命令:
xcopy "c:\Data Files\Dave's Data\*.*" "m:\Dave's Data" /R/D /E/H
在本例中,Dave的源数据包含一个完整的目录树,其中至少包含50000个文件&超过75GB的数据。它可以在Windows XP上完美运行
我发现在复制目录树时,/T
是不必要的。我还发现/S
是不必要的,因为/E
复制了目录和子目录,包括空目录。我加入了/R
来复制和覆盖目标上的只读文件<代码>/H
复制了隐藏目录<代码>/D
仅复制较新的文件。我使用它作为数据的日常备份工具
我唯一的问题是,虽然这个命令第一次可以在Windows 7上运行,但当目标目录树存在时,它在后续的运行中不起作用。我怀疑这是由于权限问题,因为xcopy命令将在cmd.exe窗口内的Windows 7上的后续运行中起作用。在我看来,xcopy通常用于复制目录树,而不是单个文件(尽管它可以工作)。并且,xcopy将在目标文件夹的源文件夹下重新创建目录结构。如果xcopy被赋予/i开关,则目标文件夹被假定为一个目录。如果它不存在,将创建它,即使需要创建多个父级
xcopy /i c:\MyJavaStuff\A\B\C\D\something.java C:\destinationfolder\A\B\C\D
您有C:\MyJavaStuff\A\B\C\D\something.java-这是您的源代码。您希望最终得到的不是C:\destinationfolder中的something.java,而是C:\destinationfolder\A\B\C\D中的something.java—因此这就是您的目标。您甚至没有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
这将重新创建整个树结构,复制您的文件。但如果有其他文件(和