Comment déplacer chaque fichier d'une arborescence vers la racine de l'arborescence?

10

J'ai un dossier (appelons-le A) avec beaucoup de sous-dossiers B, C, D, E, qui ont à nouveau des sous-dossiers B1, B2, B3, ... C1, C2, C3 ...

Comment utiliser cmd pour déplacer tous les fichiers de tous les sous-dossiers vers le dossier "racine" A?

Tour
la source
Je suppose que vous voulez que chaque fichier soit dans la même racine, pas dans les sous-dossiers? Donc A \ File1, A \ File2, pas A \ Folder2 \ File1?
Canadian Luke du
@Luke - Oui, vous l'avez. Chaque fichier qui existe dans les dossiers et sous-dossiers est déplacé vers la racine.
Tour

Réponses:

12

Mon message d'origine a négligé d'inclure l'extension du fichier dans la commande de déplacement. %~nine renvoie que le nom de base, vous devez utiliser %~nxipour obtenir à la fois le nom de fichier et l'extension! J'espère que vous n'avez pas modifié vos noms de fichiers sur mon compte! (

À partir d'une invite de commande:

cd /d C:\Path\To\A
for /r %i in (*) do @move "%i" "%~nxi"

Si vous devez ensuite nettoyer les dossiers vides:

for /d %i in (*) do @rd /s /q "%i"

Maintenant, si vous avez des conflits de noms de fichiers, vous êtes seul. Vous pouvez ajouter le /yparamètre à la movecommande (avant le "%i") pour forcer les remplacements. Si vous voulez quelque chose de différent, vous aurez besoin d'un autre programme qui peut tout renommer automatiquement pour vous.

De plus, si vous souhaitez l'utiliser dans un fichier de commandes, changez tout %en %%.

afrazier
la source
Je ne savais pas FOR /r- bien!
Daniel Beck
Wow, très génial. Je m'incline devant ton commandement.
Mokubai
2

Créez un dossier et copiez-y tous les autres dossiers, puis cliquez avec le bouton droit sur ce dossier et sélectionnez Rechercher . Dans la zone de recherche, entrez *.*.

Cela répertoriera tous les fichiers et dossiers. Sélectionnez tous les fichiers souhaités dans votre répertoire racine et coupez-les. Accédez à votre répertoire racine et collez-y tous les fichiers.

Richard
la source
la recherche n'existe pas en tant que commande dans mon cmd.
Tour
Richard ne parlait pas d'une commande. Ont édité sa réponse pour la rendre plus claire.
Isaac Rabinovitch
0

Installez Cygwin (ou un autre environnement Unix pour Windows) et exécutez ce qui suit:

cd A
find . -type f -exec mv {} . \;
Daniel Beck
la source
En fonction de votre mvet des findvariantes, vous devrez peut-être utiliser à la find . -type f -exec mv -t . {} \;place.
Daniel Beck
1
Pour les ports Windows natifs de nombreux outils Unix, j'aime unxutils.sourceforge.net
Dennis
@Dennis UnxUtils sont sympas, malheureusement assez vieux maintenant. Si vous les utilisez actuellement, pourriez-vous vérifier que ma publication fonctionne avec eux? mkdir -p a/a1 a/a2 a/a3 b/b1 b/b2 b/b3 cet touch a/a1/foo a/a1/bar a/a2/baz a/a3/qux b/b1/quux b/b2/quuux b/b3/quuuux c/cccpour la préparation.
Daniel Beck
-1 C'est peut-être vrai, mais je me demandais comment le faire en cmd.
Tour
@Daniel Sans doute, ils sont vieux, je les traîne depuis des années. J'ai juste essayé find . -type f -exec mv {} . ;Et ça a semblé fonctionner correctement.
Dennis