Copier une liste de fichiers dans une autre

2

J'ai une liste de fichiers extraits d'une table dans une base de données SQL. Le fichier peut être un fichier texte délimité ou une feuille de calcul Excel, selon ce qui convient le mieux.

Le fichier ressemble à ceci

sourcePath1\fileName1, destPath1\fileName1
sourcePath2\fileName2, destPath2\fileName2
sourcePath3\fileName3, destPath3\fileName3

etc

Une colonne contient le chemin d'origine et le nom du fichier des fichiers, la seconde colonne contient le chemin et le nom du fichier souhaités. Cela a été obtenu à l'aide d'une fonction REPLACE () standard dans l'instruction SELECT d'origine.

Maintenant, j'ai la liste (s) dont j'ai réellement besoin pour copier le fichier source vers la destination.

Est-ce réalisable en utilisant la ligne de commande (batch ou Powershell?) Ou via un script ou une interface graphique?

Danny
la source

Réponses:

2

Voici une solution de traitement par lots Windows native permettant d’analyser un fichier texte csv (valeurs séparées par des virgules).

@echo off
for /f "tokens=1,2 delims=," %%A in (file.csv) do (
    copy %%A %%B
)
David Ruhmann
la source
Cela semble correspondre à ce dont j'ai besoin, cependant, si la structure de dossier n'existe pas déjà, je reçois l'erreur "Le système ne peut pas trouver le chemin spécifié". Est-il possible de créer la structure de dossiers lors de vos déplacements?
Danny
1
Pour créer une structure de dossier, nous devrions soit analyser le chemin et utiliser mdavant la copycommande, soit utiliser comme vous l'avez fait dans votre réponse xcopy.
David Ruhmann
1

Basé sur la réponse de David Ruhmann, les travaux suivants. Il utilise xcopyet transmet un Fmessage à l'invite qui demande si le fichier est un fichier ou un dossier.

@echo off
for /f "tokens=1,2 delims=," %%A in (book1.csv) do (
    cmd /c echo F | xcopy "%%~A" "%%~B"
)

EDIT: Ajout du tilde (~) selon la suggestion de @DavidRuhmann.

Danny
la source
Je suis content que vous ayez réussi à le faire fonctionner. :)Juste quelques notes de lot. 1. Le cmd / c n'est pas nécessaire. 2. Lors de l'ajout de citations aux chemins, ajoutez le tilde pour supprimer toutes les citations existantes (le cas échéant) "%% ~ A". Il ne s'agit que d'une étape de vérification d'erreur au cas où des citations sont déjà incluses autour des chemins.
David Ruhmann
Assurez-vous de bien marquer votre réponse si cela résout votre question.
David Ruhmann
@ David Ruhmann Merci pour le suivi des points supplémentaires et pour votre réponse.
Danny
0

C'est assez facile à faire avec un shell Unix. Voici comment vous pourriez le faire avec mon shell C Hamilton . (La version gratuite le fera.) Vous pouvez faire quelque chose de très similaire avec Cygwin bash .

La méthode la plus simple consiste à transformer la liste à l’aide de sed en un script dans lequel chaque ligne correspond à une cpopération. Ensuite, lancez le script.

sed "s/^^/cp '/;s/, /' '/;s/^$/'/" < list.csv > copyscript.csh
copyscript

Voici à quoi ce copyscript.cshfichier ressemblerait:

Utilisation de sed pour convertir une liste CSV en une liste de commandes cp

Nicole Hamilton
la source
Merci d'avoir posté ceci. Où devrais-je spécifier le fichier d'entrée contenant la liste des fichiers?
Danny
Dans mes exemples, j'ai lu la liste à partir des lignes suivantes en utilisant la notation << endExample.... endExampleVous pouvez lire la liste depuis un fichier en utilisant < listoffilepairs. Si vous ne parvenez pas à faire fonctionner ce travail, appelez-le et je vous expliquerai tout. (Oui, je soutiens même ma version gratuite.)
Nicole Hamilton
@ Danny J'ai simplifié ma réponse en le faisant simplement et en lisant un fichier contenant la liste. J'espère que c'est utile.
Nicole Hamilton