Batch déplacer le contenu d'un dossier d'un niveau


5

C'est une tâche simple, dans certains cas, mais j'ai des milliers de fichiers dans des centaines de dossiers que je veux déplacer.

La structure de répertoire ressemble à ceci:

C:\Photos\subject\randomnumbers\images\file.ext

Et je veux terminer avec:

C:\Photos\subject\randomnumbers\file.ext

J'ai essayé de courir for /r %i in ("*\images\*.*") do move *\*.*mais cela ne fonctionne pas comme prévu.

Je ne peux pas penser à une autre façon de le faire que de le faire manuellement. Bien que cela fonctionne manuellement, je bénéficierais grandement d’une opération automatisée que je pourrais lancer au besoin.

C'est possible et quelqu'un peut-il m'aider avec cela?


1
Si vous avez des milliers de fichiers image et que vous souhaitez les gérer, vous devriez peut-être investir un peu de temps dans l'apprentissage exiftool ... Vous obtiendrez ce que vous voulez et probablement plus. Il suffit de jouer en toute sécurité et de tester une copie avant de s’appliquer à un grand nombre de fichiers.
Techraf

@techraf Wow, exiftool est vraiment puissant, à en juger par sa documentation! Va lire plus, merci!
HASJ

Réponses:


4

Cela devrait fonctionner pour vous:

for /r %i in ("images\*.*") do move %i %~pi..
  • %~piextrait le chemin de %i(finissant avec \)
  • .. placé après le chemin ci-dessus pointe vers le répertoire parent

Bien sûr, cela ne gère pas la situation où vous avez des fichiers avec des noms conflictuels dans des sous-répertoires.


Merveilleux! Travailler exactement comme prévu! Je ne peux pas croire que j'oubliais le %idans ma commande originale. Moi aussi je ne penserais jamais à utiliser ..! Merci et merci à tous ceux qui ont répondu! J'espère que ces réponses aideront d'autres personnes ayant des questions semblables OU différentes!
HASJ

2

Ce n'est pas très sophistiqué, et je suis sûr que les gens proposeront de meilleures solutions, mais voici une solution rapide:

  1. Effectuez une simple recherche (Explorer) en *commençant par le dossier dans lequel vous souhaitez déplacer les éléments. Cela peut prendre une demi-minute à peu près.
  2. Trier le résultat par chemin
  3. Sélectionnez tous les fichiers (ce que vous voulez déplacer) qui ne se trouvent pas déjà dans le dossier cible (ceux-ci seraient vos "milliers de répertoires" existants. Ils seront tous ensemble après le tri, alors cliquez sur "et" cliquez 'le fait.
  4. Faites-les glisser dans l'arborescence de gauche et déposez-les dans le dossier cible.
  5. Prenez un café ou faites un autre travail pendant qu'il bouge. Windows peut généralement déplacer de 40 à 7 000 fichiers par seconde, en fonction de votre matériel.
  6. Sélectionnez tous les répertoires - maintenant vides - et supprimez-les.

Notez que vous pouvez également effectuer l'étape 1 avec des filtres si vous souhaitez uniquement certains types de fichiers, par exemple *.jpg,*.png.


2

Batch déplacer le contenu d'un dossier d'un niveau

Voici une solution batch dans laquelle MoveFromDir est le répertoire de départ avec le contenu que vous allez déplacer, et MoveToDir étant le chemin explicite du répertoire. Ce contenu sera déplacé d’un niveau supérieur à MoveFromDir. Vous devez donc les définir variables en conséquence.

Déplacez tous les dossiers et fichiers de MoveFromDir et ceux du dessous vers MoveToDir

Veuillez noter que vous n'exécutez que la deuxième boucle FOR de:

  • FOR /F "TOKENS=*" %%A IN ('DIR /S /B "%MoveFromDir%\*.jpg"')

Vous pouvez spécifier uniquement les extensions de fichier que vous souhaitez déplacer vers MoveToDir (par exemple, jpg).

@ECHO ON

SET MoveToDir=C:\Photos\subject\randomnumbers
SET MoveFromDir=C:\Photos\subject\randomnumbers\images

:: Move the folders from the move directory to the move to directory
FOR /D %%A IN ("%MoveFromDir%\*") DO MOVE /Y "%%~A" "%MoveToDir%"

:: Move any remaining files (or folders) from the move directory to the move to directory
FOR /F "TOKENS=*" %%A IN ('DIR /S /B "%MoveFromDir%\*.*"') DO MOVE /Y "%%~A" "%MoveToDir%\"
GOTO EOF

Ressources supplémentaires


0

J'ai trouvé un autre moyen de le faire ... cela prend plus de temps et d'espace disque mais cela vous permet de le faire sans connaître le nom de répertoire de niveau le plus bas. Ainsi, au lieu de devoir connaître le dossier de niveau le plus bas appelé "images", il peut littéralement être n'importe quoi.

Par exemple, j'ai eu un tas de dossiers, disons qu'ils sont nommés 1, 2, 3, 4, 5, etc. et à l'intérieur de tous ces dossiers se trouvaient plusieurs dossiers contenant des fichiers. Je voulais déplacer tous les fichiers d'un dossier racine donné (1, 2, 3, 4, 5, etc.) jusqu'à ce dossier de niveau supérieur (1, 2, 3, 4, 5, etc.). J'ai découvert qu'en utilisant WinRAR, je pouvais compresser tous les dossiers de premier niveau (1, 2, 3, 4, 5, etc.) en utilisant "stocker" pour la compression afin de réduire le temps de traitement. Ensuite, je les ai simplement décompressés en utilisant à nouveau le menu du bouton de clic droit "extraire chaque archive dans un dossier séparé". Avant de décompresser, je devais toutefois "enregistrer les paramètres" dans WinRAR avec le paramètre Extraire -> Menu avancé -> Chemins de fichiers: "Ne pas extraire les chemins" et tous les fichiers zip y étaient décompressés. "

J'ai réussi à le faire avec 2350 dossiers à la fois et cela fonctionne très bien. Maintenant, je l'utilise toutes les semaines ou à peu près.


0

PowerShell:

$source = 'C:\Photos\subject\randomnumbers\images'

Get-ChildItem $source -file | move-item -Destination {$_.Directory.Parent.Fullname}

Utilisez des caractères génériques pour traiter tous les Randonmnumbers :

$source = 'C:\Photos\subject\*\images'

Get-ChildItem $source -file | move-item -Destination {$_.Directory.Parent.Fullname}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.