Commande Promp pour copier des images à partir des DOSSIERS et sous-dossiers
Je me demandais si il est possible de mettre en place une commande batch pour effectuer cette action.
Une fois .fichier bat est exécuté, TOUTES les images à partir des dossiers et sous-dossiers sont copiés à mon emplacement sur le bureau.
Exemple:
Dossier d'origine est situé:
\intranet\file_location\PP Images Complètes (dans ce dossier seront charges d'autres dossiers et dans ces dossiers, il y aura .des images jpg)
Fichier de Destination serait fondée sur le bureau.
Donc j'ai besoin d'extraire .des images jpg à partir de tous les dossiers et sous-dossiers.
Si l'image existe déjà dans le dossier d'origine, passez à l'image ou la réécriture du script sera exécuté à chaque matin.
Ou devrais-je chercher un logiciel pour faire cela pour moi?
Code existant:
cd c:
cd\
copy "\\intranet\PP Complete Images\Master Image Folder*.jpg" "C:\Users\username\Desktop\Master Image Folder"
copy "\\intranet\PP Complete Images*.jpg"
exit
- Avez-vous écrire du code pour l'instant, vous pourriez partager?
- Oui, mais il copie seulement si .les fichiers jpg sont dans un dossier: cd c: cd\ copie "\\intranet\PP Images Complètes\Master Dossier d'Image*.jpg" "C:\Users\username\Desktop\Master le Dossier de l'Image" copier "\\intranet\PP Complète des Images*.jpg" sortie
Vous devez vous connecter pour publier un commentaire.
Votre code existant:
la
cd c:
est incorrect. Pour passer le lecteur en cours dec:
utilisationLa
cd \
est redondante. Le solde de votre code spécifie les répertoires, de sorte que le répertoire courant n'est pas pertinent.Votre premier
copy
commande a trois problèmes.Master Image Folder*.jpg
signifie que tous les noms de fichiers commençantMaster Image Folder
et se terminant.jpg
. Vous signifiait probablementMaster Image Folder\*.jpg
ce qui signifie que tous les fichiers se terminant.jpg
dans...\Master Image Folder\
C:\Users\username\Deskto...
est probablement une erreur. C'est un chemin, de sorte que le répertoire réel seraitC:\Users\username\Deskto...
Vous aurez probablement besoinC:\Users\%username%\Deskto...
de remplacer en l'actuelusername
.Et puis le travail allait s'arrêter sur un nom de fichier-match, donc soit vous seriez en appuyant sur
A
écraser ou si vous voulez être sury
oun
pour chaque nom-match.Final de votre
copy
commande n'a aucun répertoire de destination spécifié.Vous pouvez
edit
-dans votre code à l'aide de laedit
bouton sous le texte original de la fenêtre, de couper-coller votre réelle code de la censure, si nécessaire, sélectionner la résultante bloc de code et en appuyant sur la{}
bouton au-dessus de la zone d'édition qui tirets à chaque ligne avec l'effet de mise en forme et sa mise en surbrillance le code.La solution la plus simple est probablement d'utiliser
qui va copier les fichiers mis à jour (/d) automatique de l'écraser (/y) et la numérisation des sous-répertoires (/s) de nom de/masque-répertoire.
Cela permettrait de créer un répertoire identique hiérarchie à l'origine de la sous-arborescence sous le destop est
Master Image Folder
répertoire.Vous pourrait l'étendre à
pour effectuer la même action sur plusieurs directory-les sous-arbres; mais vous devez vous assurer que le répertoire de destination n'est pas dans toute la sous-arborescence sélectionné pour l'inclusion dans la liste qui se trouve entre parenthèses.
Je vous le déconseille "l'aplatissement" la sortie parce que si vous le faites, la dernière quelle que soit.jpg de chacun des sous-arborescences mettre dans votre répertoire de destination, sans notification qu'il y a beaucoup de peut-être différente quelle que soit.jpg versions.
Comment voulez-vous qu'il?
Il n'est pas très clair pour moi, la façon dont le résultat exactement devrait être, devrait-il être aplatie ou devrait-il être hiérarchique ainsi?
Regardez cet exemple:
Sera le résultat en fait une copie de la hiérarchie (sans aucune autre fichier que le jpgs), ou devrait-il être un aplatie résultat comme celui-ci:
Comment pouvez-vous le faire?
Aplatie
Vous pouvez utiliser DOS'
for
commande à pied répertoires1 et faire une fonction personnalisée2 pour gérer les fichiers:Sens:
for
chaque%%f
dans la liste de*.jpg
de travail courant dir, fonction executecopyFile
. Le/r
de l'interrupteur permet l'inscription recursing (promenade à travers tous les sous-répertoires).Dans la fonction, l'argument qui lui est transmis (maintenant connu comme
%~1
) est passé à la fonction de copie: Copie le fichier dans le répertoire cible qui est..\target
dans ce cas./V
vous permet de copier de vérifier le résultat,/-Y
permet de demander la permission d'écraser des fichiers. Voircopy /?
!Très gros problème: Si vous avez un ou plusieurs fichiers dans différents sous-répertoires de votre répertoire source, qui ont le même nom (comme les deux
cheese.jpg
s dans mon exemple), vous allez perdre des données!Donc, je ne recommande pas cette approche, car vous risquez de perdre des données (appareils photo numériques ne sont pas très créatifs dans l'appellation des photos!).
Hiérarchique
Suffit d'utiliser
robocopy
:/S
crée et copys sous-dossiers ainsi. Vous pouvez également utiliser/DCOPY:T
pour faire les répertoires ont la même heure que celles à l'origine ou/L
de prévisualiser les actions de robocopy.Petit problème: Le
/E
commutateur gère les sous-dossiers, même s'ils sont vides./S
gère les sous-dossiers, mais non, si elles sont vides. Mais il gère, si elles ne sont pas vides, mais n'ont pas de JPG à l'intérieur, et donc de sous-dossiers sans les Jpg résultat dans les dossiers vides dans le dossier cible.Robocopy a des charges de paramètres, afin de vérifier
robocopy /?
.Espérons que cette aide! 🙂
1Trouvé ici: Comment parcourir l'arborescence des dossiers/sous-arbres dans un fichier de commandes windows?
2Trouvé ici: http://www.dostips.com/DtTutoFunctions.php
net use Y: \\intranet\PP Complete Images\
? Ensuite, vous pouvez accéder à la partager via la lettre de lecteurY:
.net use
ne fonctionne pas? Pourquoi pas?net use Y: \\intranet\PP Complete Images\
à la carte Y: de votre part. Par la suite, la commandeY:
change le répertoire de travail de votre part.Je crois que la solution à votre problème serait Robocopy.
Robocopy est tout simplement génial!
Voici la syntaxe de robocopy-
robocopy [Source] [Destination] [Fichier] [...] [options]
Source
Spécifie le dossier source. Lorsque vous voulez prendre les fichiers de.
Destination
Répertoire de Destination/dossier.
Fichier
Nous sommes ici! C'est ce qui va vous aider. Ici, vous pouvez spécifier une extension que vous souhaitez déplacer. Donc dans votre cas, votre code devrait ressembler à quelque chose comme ça.
robocopy *.jpg c:\destinationdir /S /MAX:1048576
*Pour exécuter cette .bat chaque matin aller pour un programme qui s'appelle le planificateur de tâches, ne vous inquiétez pas, son intégré à windows. http://windows.microsoft.com/en-US/windows/schedule-task#1TC=windows-7
*Puis Cliquez sur Créer une tâche de base, et de définir votre tâche à chaque fois que vous le souhaitez!
Merci les gars pour votre aide!!!
Je l'ai résolu, et il y a un code ci-dessous si quelqu'un aurait jamais besoin de quelque chose de similaire: