What command are you using to invoke protoc? This sort of problem usually occurs when you don't use the same root directory in protoc invocations. So you should have something like:
protoc --proto_path .\ProtoTopDir A.proto
protoc --proto_path .\ProtoTopDir Dir\B.proto Dir\C.proto
I'm not sure the issue that you have with using a single command, but perhaps you're doing something like
protoc --proto_path .\ProtoTopDir --proto_path .\ProtoTopDir\Dir A.proto B.proto C.proto ...
In this case, when you read A.proto, it will search for the import Dir\B.proto, and add those definitions. Then when it reads B.proto, it finds it in the second --proto_path, but these definitions are duplicated with what's already been read as Dir\B.proto via A's import. protoc doesn't do path canonicalization, as this gets complicated with . and ../, symlinks, etc etc.