【问题标题】:How do I copy from numerous release directories to a single folder如何从多个发布目录复制到单个文件夹
【发布时间】:2009-07-17 17:41:23
【问题描述】:

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

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

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

例子:

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

等等等等……

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

等等等等……

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

有什么想法吗?

【问题讨论】:

    标签: deployment command-line copy xcopy


    【解决方案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
    

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

    【讨论】:

      【解决方案2】:

      对不起,我还没试过,但你不应该使用吗:

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

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

      【讨论】:

      • /S 开关创建树结构的副本,我想将其展平到单个目录
      • 这不会复制所有名为 release*.exe 的文件,而不是从名为 release 的文件夹中复制吗?
      【解决方案3】:

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

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

      【讨论】:

      • 你知道,如果我经常编写实用程序套件,而我经常不得不这样做,那将是一个选择。但我这样做的唯一原因是因为我厌倦了不得不导航到这么多地方的公用事业。通常我每个“项目”只有 1 个 exe。
      【解决方案4】:

      好的,这可能不适合你,因为你似乎在 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 实用程序。
      也许 Windows shell 中有工具可以做到这一点......

      【讨论】:

        【解决方案5】:

        这可能有助于您入门:

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

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

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

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

        【讨论】:

          猜你喜欢
          • 2017-11-11
          • 1970-01-01
          • 2019-09-01
          • 1970-01-01
          • 1970-01-01
          • 2015-10-15
          • 2018-08-06
          • 2021-02-18
          • 1970-01-01
          相关资源
          最近更新 更多