Sim, é bem possível. O que você precisa fazer é que você precisa ler todos os nomes de arquivo em seu caminho e considerar espaços, pontos e.t.c. Se você quiser fazer isso com eficiência, pode usar esse thread: Como executo uma ação em todos os arquivos com uma extensão específica em subpastas de uma maneira elegante?
Agora, depois de ler os arquivos no nome do caminho, você precisa estabelecer uma regra.
Por exemplo, vamos considerar essa estrutura:
.test
.test.subfolder
.test.subfolder.subsubfolder
O que você precisa fazer é contar a ocorrência da palavra sub em cada um dos nomes dos arquivos. Portanto, se a contagem for: 0, é a pasta pai, se contar: 1, é um filho de 1º nível, se contar: 3 - > é uma criança de 2º nível e assim por diante (o nível é deduzido da estrutura fornecida por você)
Assim, um possível pseudo-código será parecido com:
if(filename contains(".test"))
{
searchCount("sub");
if(count ==0)
parent();
else if(count ==1)
1stLevelChild();//and so on
}
Agora, de acordo com o resultado que você está chegando aqui, você só precisa usar o comando Mover
para mover os arquivos em pastas apropriadas.