Folder1\
....Folder2\
........File1.ext
........File2.ext
....Folder3\
........File3.ext
........File4
....Folder4\
....File5.ext
....File6.ext
....File7.ext
....File8
The only solution I could find was to add an additional folder pairs for every folder I exclude, and add special include rules for them. E.g. in this example, the base directory pair would have the exclude rule \Folder1\, and then the new folder pair for Folder1 would have the include rule *\ so that it only syncs the subfolders. But I dislike this workaround, because:
1) It is quite cumbersome and inelegant, especially as I need to do this for many, many folders. Ideally I would like to just use a slightly modified exclude rule, which is fundamentally what I want FreeFileSync to do under the hood anyway.
2) Also, I use the "Detect moved files" setting, and I noticed that the additional-folder-pairs workaround causes creation of sync.ffs_db in every folder that I use this workaround for. Again, inelegant (not very important but I would prefer not having superfluous files in multiple deep folders), but also I guess this means that databases are kept separate for the pairs, so moving files would not be detected (I did not test this), when all I wanted in the first place was a single sync pair, just with a slightly different exclude rule.
I think a wild card character that doesn't match path separator characters would solve this issue. E.g. say the : character or maybe ** corresponds to zero or more characters, except the path separator characters \ and /. Then the exclude rule \Folder1\: would match only the files that are direct children of Folder1, and the files in Folder2 and Folder3 would be synced. I am not sure if the exclude rule would cover Folder4, I guess it depends on the implementation, though I wouldn't care either way as I don't tend to have many empty folders. Such a wild card character would allow other more complicated filters that may be desirable to some people, like excluding .txt files from only second level subdirectories (not first level and not third level), and so on.
(If it's actually possible to do this without resorting to the workaround I mentioned, please let me know.)