web-dev-qa-db-fra.com

Comment déplacer tous les fichiers avec une extension spécifique de tous les sous-répertoires vers leur parent en utilisant CMD?

Dossier c:\folder1 contient subfolder1, subfolder2, etc..

Ces sous-répertoires contiennent .pdf et .db des dossiers.

Comment tous les .pdf les fichiers seront déplacés vers c:\folder1 en utilisant l'interpréteur de commandes Windows?

18
mihai

Cela a fonctionné pour moi:

for /r "c:\source_directory\" %%x in (*.pdf) do move "%%x" "c:\target_directory\"

Cette commande copiera récursivement tous les fichiers pdf du répertoire source vers le répertoire cible en utilisant cmd dans windows 7 - testé et fonctionne.

J'espère que ça aide.

21
pablo M

La boucle for externe répertorie les sous-répertoires du répertoire de travail, la boucle for interne répertorie les sous-répertoires à déplacer vers le chemin de destination:

for /d %f in (*.*) do for /d %e in (%f\*.*) do move "%e" DestinationPath

Cela fonctionne mieux si DestinationPath n'est pas un sous-dossier du répertoire de travail, car il essaiera de déplacer DestinationPath en lui-même.

Pour confirmer la commande avant de l'exécuter en gros, commencez simplement par faire écho aux commandes de déplacement final comme suit:

for /d %f in (*.*) do for /d %e in (%f\*.*) do echo move "%e" DestinationPath

et copiez/collez l'un des résultats pour l'exécuter et confirmez qu'il a fonctionné comme vous vous y attendiez. Retirez ensuite l'écho et bougez.

6
Craig Nichols

Je ne pense pas qu'il existe un caractère générique qui fonctionnera sur les sous-dossiers, vous devez donc utiliser une boucle pour parcourir chaque sous-dossier et déplacer * .pdf;

FOR /R [your root folder path] %%G IN (*.pdf) DO move %%G [new path]

La commande après DO est intrinsèquement dans ses propres guillemets. Si vous prévoyez des espaces dans votre source ou destination, utilisez des guillemets doubles pour les encapsuler, par exemple:

FOR /R "source folder with spaces" %%G IN (*.pdf) DO move "%%G" "dest path with spaces"

REMARQUE les guillemets autour de %% G, ceux-ci sont requis pour que la commande de déplacement résolve le chemin.

** MODIFIER: En réponse à la réponse acceptée, la commande From vous invite sous Windows XP et Windows 7, respectivement:

command prompts

Cela montre qu'un caractère générique ne fonctionne pas dans les chemins, uniquement pour les fichiers dans un seul répertoire (par exemple C:\dossier * .files). L'invite de commandes ne fonctionne pas de manière récursive lorsqu'elle rencontre un caractère générique.

5
Eaglebird

Il existe une autre façon de procéder dans l'Explorateur Windows (interface graphique, pas d'invite de commandes):

  • Accédez au répertoire de niveau supérieur
  • Dans la zone de recherche en haut à droite, tapez * .pdf et appuyez sur recherche
  • Sélectionnez tous les fichiers et faites-les glisser vers le dossier de niveau supérieur
  • Répondre à toutes les invites concernant le remplacement de fichiers
4
Will Sheppard

Je sais que c'est superlate, mais juste au cas où cela aiderait quelqu'un.

Utilisé pour rechercher dans tous les sous-dossiers un fichier .MKV et les déplacer vers le répertoire actuel dans lequel se trouve le fichier de commandes.

FOR /D /r %%F in ("*") DO (
    pushd %CD%
    cd %%F
        FOR %%X in (*.mkv) DO (
            move "%%X" "%CD%"
        )
    popd
)
3
Alfredo
@echo on

for /r "F:\All_drawings\newdrg\" %%x in (*.tiff) do move "%%x" "F:\Alldrawings"

pause

{déplace tous les fichiers du dossier newdrg et de ses "sous-dossiers" vers le dossier cible Alldrawings, cette commande est destinée à une opération par fichier batch pour la ligne de commande, utilisez un seul "%" aux deux endroits }.

2
subbu

Robocopy a fait des merveilles pour moi:

 robocopy c:\cache c:\cache-2012 ?????-2012*.hash /S /MOV

Je l'ai utilisé pour déplacer tous les fichiers avec un certain masque hors de c:\cache et ses nombreux sous-répertoires.

2

Je prends juste un coup de fou dans le noir ici, mais si je me souviens bien, DOS peut gérer les globes et l'équivalent de mv est MOVE, donc:

MOVE C:\FOLDER1\*\*.PDF C:\FOLDER1\

1
ido
MOVE "C:\FOLDER 1\PDF FILES\*.pdf" "C:\FOLDER 1"
MOVE "C:\FOLDER 1\DB FILES\*.db" "C:\FOLDER 1"

Après la commande de déplacement, vous avez le dossier source suivi de la destination vers laquelle les fichiers seront déplacés. Le * devant chaque extension de fichier est une fonction générique qui sélectionnera tous les types de fichiers spécifiés existant dans ce répertoire.

De plus, si vous pouvez créer un fichier .bat avec ces commandes si vous le souhaitez. Pour ce faire, collez vos commandes dans le bloc-notes et enregistrez-les sous . Bat au lieu de . Txt

Ensuite, vous pouvez double-cliquer sur le fichier et il exécutera les commandes dans le fichier à chaque fois. Ceci est utile si vous avez des tâches répétitives qui le nécessitent.

1
THE DOCTOR