J'ai besoin d'une commande qui peut être exécutée à partir de la ligne de commande pour créer un dossier pour chaque fichier (basé sur le nom de fichier) dans un répertoire, puis déplacer le fichier dans les dossiers nouvellement créés.
Exemple :
Dossier de démarrage:
Dog.jpg
Cat.jpg
La commande suivante fonctionne très bien pour créer un dossier pour chaque nom de fichier dans le répertoire de travail actuel.
for %i in (*) do md "%~ni"
Dossier de résultats:
\Dog\
\Cat\
Dog.jpg
Cat.jpg
Je dois aller plus loin et déplacer le fichier dans le dossier.
Ce que je veux réaliser, c'est:
\Dog\Dog.jpg
\Cat\Cat.jpg
Quelqu'un peut-il m'aider avec une seule commande pour faire tout cela?
for %i in (*) do cmda && cmdb
B) pourrait faire écho en premierfor %i in (*) do @ECHO cmda && cmdb
C) pourrait ajouter Je pense que c'est un / R pour passer par les sous-répertoires.for %i in (*) do move "%~i" "%~ni"
Même cela pourrait ne pas être suffisant, car cela peut avoir des effets secondaires lorsque le dossier cible n'existe pas (par exemple, les fichiers étant "déplacés" sur eux-mêmes, donc renommés). Une solution simple serait de combiner les deux commandes, comme ceci:for %i in (*) do md "%~ni" && move "%~i" "%~ni"
La commande suppose que les répertoires n'existent pas déjà.cmda && cmdb
ilcmdb
sera exécuté uniquement s'ilcmda
a réussi. Si vous deviez utiliser à lacmda & cmdb
place, la deuxième commande serait exécutée malgré tout. En fait, une seule esperluette (&
) n'est qu'un séparateur de commandes et la double esperluette (&&
) est une conditionnelle . Les commandes qui ne définissent pas deerrorlevel
valeur ne doivent pas être utilisées avec cette dernière.Exécutez simplement ces commandes en série:
Pour créer les dossiers de chaque fichier:
Pour déplacer chaque fichier dans son dossier:
la source
Cela le fera si vous avez des dossiers comme: exemple years \ Filename.mp4
il listera tous les fichiers de 1er niveau du dossier; répertorie tous * .mp4 et * .mkv créera les 2 dossiers de niveau avec le nom de fichier et déplacera tous les fichiers de même nom dans le dossier de 1er niveau vers le dossier de 2e niveau, exécutez-le dans le dossier de base des années.
Si vous n'avez pas de dossier YEARS de premier niveau, vous pouvez simplement ignorer le premier et exécuter la 2e étape, exécutez-le dans le dossier de base du nom de fichier.
Le && s'assurera que le mkdir% ERRORLEVEL% précédent est 0 pour exécuter le déplacement des fichiers
Pour tester, utilisez ceci:
la source