J'ai un tas de dossiers dans les dossiers. Comme ça
Root Folder
-- Folder 1
-- Folder 2
-- Folder 3
-- Folder 4
Je veux réduire tous les dossiers afin que tous les fichiers sous dossier1, dossier 2, dossier 3, ... dossier n existent sous le dossier racine.
Quel est le moyen le plus rapide de le faire sous Windows?
Réponses:
Il n'y a aucune raison d'utiliser des outils spéciaux ou même des scripts. Utilisez simplement la fonction de recherche dans l'Explorateur.
*
et appuyez sur Entrée.Si vous préférez avoir un script pour pouvoir le démarrer et l'oublier, cela peut également être fait. La commande à remplacer
mv *\* .
est assez facile (for /r %f in (*.*) do @move "%~f" .
) mais je suis sûr que vous aimeriez gérer les doublons, sans les laisser comme dans la réponse de @Nicole Hamilton. Ajouter un numéro au nom de fichier des doublons est probablement le moyen le plus simple de le faire.Copiez et collez le fichier de commandes suivant dans le Bloc-notes et enregistrez-le sous "flatten.cmd" (y compris les guillemets):
Pour utiliser le script, faites simplement glisser le dossier que vous souhaitez aplatir dessus.
la source
Vous pouvez aplatir dans l'Explorateur Windows en accédant au dossier que vous souhaitez aplatir et en recherchant pour
System.Kind:<>folder
exclure les dossiers des résultats.Vous pouvez ensuite sélectionner tous les fichiers avec CTRL + A et les copier et les coller dans un nouveau dossier. Notez que l'Explorateur Windows vous demandera comment gérer les noms de fichiers en double.
la source
System.Kind:<>cartella
)Ce genre de chose est facile avec un shell Unix. Voici ce que vous pourriez faire avec mon propre shell Hamilton C (y compris la version gratuite) . Vous pouvez faire quelque chose de très similaire avec Cygwin bash.
Si votre répertoire est vraiment énorme, il est possible que le caractère générique soit placé dans une ligne de commande trop longue pour que Windows puisse passer à un processus enfant. (L' appel Windows CreateProcess limite la liste d'arguments à 32 Ko de caractères Unicode.) Mais le shell C n'a pas de limite en interne, vous pouvez donc parcourir toute la liste de cette façon:
Pour le point de @ MarkAllen ci-dessus, ce genre suppose qu'il n'y a pas de noms en double. Si tel est le cas, les dernières copies de la liste remplaceront les plus anciennes. Si cela vous inquiète, vous pouvez parcourir les fichiers, en
mv
les utilisant uniquement si vous n'écrasez pas. L':t
opérateur est l' opérateur de queue . L'-e
opérateur est le fichier existe test .Cela laisse toujours les répertoires vides, ce que vous ne voulez peut-être pas après qu'ils ont été vidés. Cela pourrait être la prochaine itération si cela importait.
la source
bash
,mv */* .
ça marche pour moi.