1

好吧,我猜这与编程无关......

我有一大堆有用的小控制台实用程序分散在我编写的一组项目中,我想将它们全部转储到一个目录中以使使用它们更简单。唯一的问题是我在调试和发布模式下都编译了它们。

鉴于我只想要实用程序目录中的发布模式版本,什么开关可以让我指定我想要树结构中的所有可执行文件,但只能来自发布文件夹:

例子:

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

等等等等……

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

等等等等……

我认为这对 XCopy 来说是小菜一碟 - 但它似乎不允许我排除 Debug 目录 - 或者更确切地说 - 只包括我的 Release 目录中的项目。

有任何想法吗?

4

5 回答 5

1

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

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

\Debug\

然后使用以下命令:

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

但是,您可以使用xxcopy(非商业用途免费)完成您想要的工作。阅读技术公告 #16以了解扁平化功能的说明。

如果该技术公告中的声明是正确的,则它确认仅使用 xcopy 无法完成扁平化。

以下命令将使用 xxcopy 完成您想要的操作:

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

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

于 2009-07-17T18:01:07.233 回答
0

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

xcopy 发布*.exe d:\destination /s

我目前在我的 Mac 上,所以我无法确定。

于 2009-07-17T17:43:37.347 回答
0

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

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

于 2009-07-17T17:47:39.133 回答
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中有工具可以做到这一点......

于 2009-07-17T17:58:24.027 回答
0

这可能会帮助您入门:

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

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

您应该能够修改它以在 ~dpi 部分之后添加 '\bin\release\' 并将 dir 更改为 xcopy。一些小实验应该很容易。

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

于 2009-07-17T18:11:56.230 回答