Batch file 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

我在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\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
    
    这将重新创建整个树结构,复制您的文件。但如果有其他文件(和