Je n'arrive tout simplement pas à trouver un moyen sur la ligne de commande de dire "copiez tous les fichiers du répertoire A vers le répertoire B, mais si le fichier existe déjà dans le répertoire B, ne l'écrasez pas, quel que soit le fichier le plus récent , et ne me demandez pas. "
J'ai traversé la copie, le déplacement, la xcopy et la robocopy, et le plus proche que je puisse obtenir est que vous pouvez dire à robocopy "copier A vers B, mais n'écrasez pas les fichiers plus récents avec des fichiers plus anciens", mais cela ne fonctionne pas pour moi . J'ai regardé xxcopy, mais je l'ai jeté, car je ne veux pas avoir une dépendance tierce sur un événement post-build de Visual Studio qui nécessitera que d'autres utilisateurs SVN aient cet outil installé afin de faire la génération.
Je souhaite ajouter une ligne de commande à l'événement de post-génération dans Visual Studio 2010 afin que les fichiers générés à partir des modèles T4 pour les nouveaux objets de modèle EF soient distribués dans les dossiers de projet auxquels ils appartiennent, mais les fichiers régénérés pour les objets existants n'écrasez pas les fichiers de destination potentiellement modifiés.
Puisque le modèle T4 se régénère, le fichier source est toujours plus récent, et je ne peux pas utiliser le commutateur «plus récent» de manière fiable, je ne pense pas.
J'utilise des classes partielles pour les éléments pour lesquels je peux, mais il y a d'autres choses que je génère qui ne peuvent pas utiliser de classes partielles (par exemple, générer un fichier EditorTemplate ou DisplayTemplate * .ascx par défaut).
Quelqu'un a-t-il des problèmes similaires qu'ils ont résolus?
cmd.exe
lafor
commande de? Sinon, je vous recommande de courirfor /?
et de l'utiliser.Réponses:
la source
~nx
dans%~nxF
exactement?~nxF
la variableF
se transforme en un nom de fichier et une extension.Pour élaborer (en utilisant les réponses Hydrargyrum, HailGallaxar et Andy Schmidt):
/E
permet à Robocopy de copier récursivement les sous-répertoires, y compris les vides./XC
exclut les fichiers existants avec le même horodatage, mais des tailles de fichier différentes. Robocopy les écrase normalement./XN
exclut les fichiers existants plus récents que la copie dans le répertoire de destination. Robocopy les écrase normalement./XO
exclut les fichiers existants plus anciens que la copie dans le répertoire de destination. Robocopy les écrase normalement.Avec les classes Changed, Older et Newer exclues, Robocopy fait exactement ce que l'affiche originale veut - sans avoir besoin de charger un environnement de script.
Références: Technet , Wikipedia
Téléchargement depuis: Lien de téléchargement Microsoft (Dernière vérification du lien le 30 mars 2016)
la source
/e
? Et si vous utilisez à la/s
place? Je ne veux pas d'un tas de sous-dossiers vides.La solution de Bélisaire est bonne.
Pour élaborer sur cette réponse légèrement laconique:
/E
permet à Robocopy de copier récursivement les sous-répertoires, y compris les vides./XC
exclut les fichiers existants avec le même horodatage, mais des tailles de fichier différentes. Robocopy les écrase normalement./XN
exclut les fichiers existants plus récents que la copie dans le répertoire source. Robocopy les écrase normalement./XO
exclut les fichiers existants plus anciens que la copie dans le répertoire source. Robocopy les écrase normalement.Avec les classes Changed, Older et Newer exclues, Robocopy fait exactement ce que l'affiche originale veut - sans avoir besoin de charger un environnement de script.
la source
Vous pouvez essayer ceci:
-y
invite simplement avant d'écraser et nous pouvons diriger n vers toutes ces questions. Donc, cela ne ferait que copier des fichiers non existants. :)la source
copy /-y
simplement supposer automatiquement Non une fois que stdin est à court d'entrée. Vous pouvez omettre le premier expliciten
, ou y insérer un tube< nul
, et la même chose se produit.Le voici sous forme de fichier batch:
la source
Je veux juste clarifier quelque chose de mes propres tests.
@Hydrargyrum a écrit:
C'est en fait à l'envers. XN fait "eXclude Newer" les fichiers mais il exclut les fichiers qui sont plus récents que la copie dans le répertoire de destination . XO fait "eXclude Older", mais il exclut les fichiers qui sont plus anciens que la copie dans le répertoire de destination .
Bien sûr, faites vos propres tests, comme toujours.
la source
Il existe une façon étrange de faire cela avec xcopy:
Incluez simplement autant de n que de fichiers que vous copiez, et cela répondra à n à toutes les questions d'écrasement.
la source
copy
, voir cette réponse , en particulier @mwfearnley comment:copy /-y
suppose automatiquementn
une fois que stdin est épuisé, donc vous ne pouvez par exempleecho n
qu'une seule fois et cela fonctionne toujours./ XX: eXclude les fichiers et répertoires "eXtra" (présents dans la destination mais pas dans la source). Cela empêchera toute suppression de la destination. (c'est la valeur par défaut)
la source
Robocopy peut être téléchargé ici pour les systèmes sur lesquels il n'est pas déjà installé. (Ie Windows Server 2003.)
http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=17657 (aucun redémarrage requis pour l'installation)
N'oubliez pas de définir votre chemin vers l'exe robocopy. Pour ce faire, cliquez avec le bouton droit de la souris sur "mon ordinateur"> propriétés> avancé> "Variables d'environnement", puis recherchez la variable système du chemin et ajoutez-la à la fin: "; C: \ Program Files \ Windows Resource Kits \ Tools" ou partout où vous installé. Assurez-vous de laisser les chaînes de variables de chemin qui sont déjà présentes et ajoutez simplement le chemin supplémentaire.
une fois le chemin défini, vous pouvez exécuter la commande suggérée par belisarius. Cela fonctionne très bien.
la source
Cela ne me permettra pas de commenter directement les messages incorrects - mais laissez-moi simplement avertir tout le monde que la définition des options / XN et / XO est INVERSÉE par rapport à ce qui a été publié dans les messages précédents.
L'option Exclure les fichiers plus anciens / plus récents est cohérente avec les informations affichées dans la journalisation de RoboCopy: RoboCopy effectuera une itération dans la SOURCE, puis indiquera si chaque fichier de la SOURCE est "PLUS ANCIEN" ou "PLUS NOUVEAU" que le fichier de la destination.
Par conséquent, / XO exclura les fichiers ANCIENS SOURCE (ce qui est intuitif), pas "plus anciens que la source" comme cela a été affirmé ici.
Si vous souhaitez copier uniquement des fichiers source nouveaux ou modifiés, mais évitez de remplacer des fichiers de destination plus récents, alors / XO est la bonne option à utiliser.
la source
Une approche simple serait d'utiliser l'option / MIR, pour refléter les deux répertoires. Fondamentalement, il ne copiera que les nouveaux fichiers vers la destination. Dans la prochaine commande, remplacez la source et la destination par les chemins d'accès à vos dossiers, le script recherchera n'importe quel fichier avec des extensions.
la source
C'est ce qui a fonctionné pour moi. J'utilise ceci pour "ajouter" des fichiers à l'autre lecteur, sans écrasement.
Fichier batch: robocopy-missingfiles.bat
Exemple:
Faites un test avant la mise en œuvre.
la source