将过滤器中的所有.cpp和.h移动到另一个项目并更正其文件夹位置

jav*_*ver 8 c++ visual-studio

这是解决方案资源管理器中显示的Visual Studio中我的项目的过滤: -

ProjectName1
== References, External Dependencies, Header Files, Resource Files
== Source Files
==== myFilter01
------ K.h               (system folder = `D:\ProjectName1\K.h`)
------ K.cpp             (system folder = `D:\ProjectName1\K.cpp`)   
==== myFilter02                                                 
====== subFilter2_1                                              
--------- B.h            (system folder = `D:\ProjectName1\B.h`)
--------- B.cpp          (system folder = `D:\ProjectName1\B.cpp`)   
========= subFilter2_2                                           
----------- C.h          (system folder = `D:\ProjectName1\C.h`)   
----------- C.cpp        (system folder = `D:\ProjectName1\C.cpp`)   
ProjectName2                                                   
== ... (some existing filter/files)    
Run Code Online (Sandbox Code Playgroud)

(在实际情况中,所有过滤器都包含许多子过滤器和文件.)

如何 :

  • 将所有.h.cpp文件(BC)内myFilter02ProjectName2文件夹(如D:\ProjectName2)
  • 不要改变过滤器的外观(例如,C必须仍然在subFilter2_1\subFilter2_2)
  • 并且只需点击几下(即不依赖于文件/子过滤器的数量)即可 O(1)

这是预期的结果: -

ProjectName1
== References, External Dependencies, Header Files, Resource Files
== Source Files
==== myFilter01
------ K.h               (system folder = `D:\ProjectName1\K.h` )
------ K.cpp             (system folder = `D:\ProjectName1\K.cpp` )   
==== myFilter02 
ProjectName2
== ... (some existing filter/files)       
== subFilter2_1                                                             
----- B.h                (system folder = `D:\ProjectName2\B.h` )
----- B.cpp              (system folder = `D:\ProjectName2\B.cpp` )
===== subFilter2_2                                             
------- C.h              (system folder = `D:\ProjectName2\C.h` )
------- C.cpp            (system folder = `D:\ProjectName2\C.cpp` )
Run Code Online (Sandbox Code Playgroud)

它可以手动完成每个子子过滤器+添加现有文件,但这非常繁琐.

我试图右键单击过滤器/文件,但没有找到这样的功能.
我目前不使用任何Microsoft的源代码控制/存储库(以防它是相关的).

注意:过滤器上的常规拖放操作不会将文件移动到另一个项目的文件夹.
它只是使移动的文件成为原始位置()的快捷方式D:\ProjectName1\.

热键?插入?脚本?
我真的必须创建一个程序来完成这个特定的事情吗?

提问几天后,我用RapidXML ~500-1000行用c ++编写了代码.
我有编辑.vcxproj.filters.vcxproj两个项目的和移动的系统文件.
不过,我仍然没有找到关于这个问题的答案.

编辑

(收到Hans Passant和Prab的建议后,谢谢!)
我想使用过滤器而不是文件夹,原因如下: -

  • 源代码控制更容易,因为所有源文件都在同一目录中.
  • 在Visual Studio中,我可以比围绕文件夹更轻松地移动不同过滤器周围的文件.
  • 使用Filter,我不必为每个文件夹延长#include "../myFilter01/K.h"或添加其他包含目录.我很简单#include "K.h".
  • 如果我更改文件驻留在过滤器中的位置,我不必重构它.
    如果要更改文件夹,我必须重构代码.
  • 我可以使用非常奇怪的字符,例如 =???myFilter01???=过滤器而不是文件夹.这是我的口味.

我不想

  • 使用文件夹而不是过滤器: 除了重新创建许多文件夹和.cpp/.h手动移动文件的困难之外,我将遇到上述缺点.
  • 使用与过滤器结构相同的文件夹: 我必须手动将它保持同步(所有时间 - 单调乏味).我仍然会遇到一些上述缺点.

总之,使用文件夹而不是过滤器会给我带来比它解决的更多新麻烦.

Log*_*man 0

这不是一键式解决方案,但可以比手动更快地完成。

  1. 找出需要复制的文件。为此,请将过滤器从一个项目移动到另一个项目。然后切换到第一个项目的目录视图(显示所有文件)并复制但不复制带有小红色指示器的过去文件(项目中未包含的文件)。现在返回两个项目的筛选器视图,并将筛选器移回到第一个项目。之后,将两个项目切换到目录视图并传递第二个项目。

  2. 现在我们需要创建正确的过滤器。将文件从源和标头过滤器移动到第二个项目中的另一个过滤器。卸载这两个项目。打开第一个和第二个项目 .filters 文件,将除“源文件”、“头文件”、“资源文件”之外的所有过滤器标记从第一个文件复制到第二个文件。接下来从第二个文件删除所有以源或标头开头的标签。现在,从第二个 ItemGroup 复制整个内容并将其传递到第二个文件第二个 ItemGroup。保存第二个文件。

  3. 此时,您应该拥有第一个项目过滤器树的副本,而没有不必要的文件,现在只需将您想要的内容移动到正确的位置即可。

在第一个项目中创建单棵树很有帮助。