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?
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?
Réponses:
Mon message d'origine a négligé d'inclure l'extension du fichier dans la commande de déplacement.
%~ni
ne renvoie que le nom de base, vous devez utiliser%~nxi
pour 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 /y
paramètre à la move
commande (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 %%
.
FOR /r
- bien!
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.
Installez Cygwin (ou un autre environnement Unix pour Windows) et exécutez ce qui suit:
cd A
find . -type f -exec mv {} . \;
mv
et des find
variantes, vous devrez peut-être utiliser à la find . -type f -exec mv -t . {} \;
place.
mkdir -p a/a1 a/a2 a/a3 b/b1 b/b2 b/b3 c
et touch a/a1/foo a/a1/bar a/a2/baz a/a3/qux b/b1/quux b/b2/quuux b/b3/quuuux c/ccc
pour la préparation.
find . -type f -exec mv {} . ;
Et ça a semblé fonctionner correctement.