Copier tous les fichiers d'une liste d'emplacements de dossiers

1

J'ai une liste d'emplacements de dossiers à partir de laquelle j'aimerais copier tous les fichiers contenus à ces emplacements. La liste des emplacements de dossiers est stockée sur une ligne distincte dans un fichier texte (.txt). Tous les fichiers doivent être copiés au même endroit.

Comment puis-je terminer cet exercice en utilisant cette liste de dossiers en combinaison avec une fonction de copie à l'invite de commande?

BobJim
la source

Réponses:

3

Considérant un fichier avec un contenu similaire contenant une liste de répertoires tels que:

c:
c:\users 
c:\anyotherfolder

xcopydans une forboucle fera le travail :)

for /f %a in (list.txt) do xcopy /e %a\* c:\destination_folder\

(en copiant l’arborescence complète du répertoire /e)


Vous devez ajouter un supplément %au nom de la variable si vous souhaitez conserver et l'exécuter dans un .batfichier séparé .


la source
Les emplacements de dossier dans list.txt doivent-ils être séparés par des lignes vides?
BobJim
2
Selon la façon dont @ Elvin a répondu, chaque dossier devrait figurer sur une ligne distincte du fichier texte, mais aucun espace supplémentaire. Si vous devez le modifier, consultez la for /?commande help où elle mentionne delims et les jetons.
GuitarPicker
1
Non, ce n'est pas obligatoire (j'ai reformaté mon message pour éviter la confusion).
Le script fonctionne parfaitement lorsqu'il n'y a pas d'espaces dans les noms de dossiers. Le code peut-il être modifié pour qu'il fonctionne lorsque les chemins de dossiers incluent des espaces?
BobJim
@BobJim oui, il suffit d'utiliser des guillemets doubles dans la valeur de la variable - "% a"
0

J'ai pris le code Elvins et l'ai légèrement développé pour résoudre le problème des espaces inclus dans les chemins et les noms de dossiers.

La commande For Do utilise désormais un fichier CSV pour trouver les chemins des dossiers. Il était ensuite nécessaire d'inclure l' "delims=,"option dans la commande For.

for /f "delims=," %a in (D:\Batch_Files\Test_Bench\Folders_List.csv) do copy "%a\*" D:\Batch_Files\Test_Bench\Paste_All_The_Files_Here

Les enregistrements délimités par des virgules permettaient For /fà l'accès aux emplacements contenant des espaces, mais uniquement si le jeton %a\*était encapsulé dans "".

BobJim
la source