如何从众多版本目录复制到单个文件夹

时间:2009-07-17 17:41:24

标签: deployment command-line copy xcopy

好的,这是编程相关的,我猜...

我在我编写的一系列项目中分散了大量有用的控制台实用程序,我想将它们全部转储到一个目录中,以便更简单地使用它们。唯一的问题是我将它们全部编译为Debug和Release模式。

鉴于我只想在我的实用程序目录中使用发布模式版本,哪个开关允许我指定我想从我的树结构中获取所有可执行文件,但只能从Release文件夹中:

示例:

Projects\   
  Project1\
    Bin\
      Debug\
        Project1.exe
      Release\
        Project1.exe   
  Project2\
等等......

Utilities\
  Project1.exe
  Project2.exe
  Project3.exe
  Project4.exe
  ...
等等......

我认为这对XCopy来说很简单 - 但它似乎不允许我排除Debug目录 - 或者更确切地说 - 只包含我的Release目录中的项目。

有什么想法吗?

5 个答案:

答案 0 :(得分:1)

您可以将其限制为仅发布具有以下内容的可执行文件。但是,我不相信单独使用xcopy可以实现扁平化的其他要求。要做限制:

首先创建一个文件,例如 exclude.txt 并将其放入:

\Debug\

然后使用以下命令:

xcopy /e /EXCLUDE:exclude.txt *.exe C:\target

然而,您可以使用xxcopy完成您想要的任务(免费用于非商业用途)。请阅读technical bulletin #16以获取有关展平功能的说明。

如果该技术公告中的声明是正确的,那么它确认单独使用xcopy无法实现展平。

以下命令将使用xxcopy执行您想要的操作:

xxcopy /sgfo /X:*\Debug\* .\Projects\*.exe  .\Utilities

我建议阅读技术公告,因为它为扁平化提供了更复杂的选项。我选择了上面最基本的一个。

答案 1 :(得分:0)

抱歉,我还没有尝试过,但你不应该使用它:

xcopy release * .exe d:\ destination / s

我目前正在使用我的Mac,所以我确实无法确定。

答案 2 :(得分:0)

这可能无法帮助您在一个地方将它们全部组装在一起,但是您可以考虑在Visual Studio中为项目添加一个构建后事件(我假设您根据目录名称使用它)

xcopy / Y / I / E“$(TargetDir)\ $(TargetFileName)”“c:\ somedirectory \ $(TargetFileName)”

答案 3 :(得分:0)

好吧,这可能不会对你有用,因为你似乎是在Windows机器上 无论如何,这都是为了逻辑。

# From the base directory
mkdir Utilities
find . -type f | grep -w Release > utils.txt
for f in $(<utils.txt); do cp $f Utilities/; done

您可以将findcp行合并为一行,我将其拆分以便于阅读。

要在Windows机器上执行此操作,您需要Cygwin或一些此类Unix Utilities 也许Windows shell中有工具可以做到这一点......

答案 4 :(得分:0)

这可能有助于您入门:

C:\>for %i in (*) do  dir "%~dpi\*.exe"

在dir命令中用作i的修饰符,~dp使用(*)中找到的所有内容的驱动器和路径。如果我在包含多个包含可执行文件的子文件夹的文件夹中运行上述内容,我会得到每个文件夹中所有可执行文件的目录列表。

您应该能够修改它以在~dpi部分之后添加'\ bin \ release \'并将dir更改为xcopy。一点实验应该让它变得非常简单。

要在批处理文件中使用上述for语句,请在两个位置将'%'更改为'%%'。