Question

Je ne peux pas sembler trouver un moyen sur la ligne de commande pour dire « copier tous les fichiers du répertoire A dans le répertoire B, mais si le fichier existe déjà dans le répertoire B, ne pas écraser, peu importe qui fichier est plus récent, et ne pas me demander. "

Je suis passé par copier, déplacer, xcopy & robocopy, et le plus proche que je peux obtenir est que vous pouvez dire robocopy « copier A à B, mais ne pas les fichiers les plus récents Ecraser avec des fichiers plus anciens, » mais cela ne travaille pour moi. Je regardais XXCOPY, mais gaspillée, elle, que je ne veux pas avoir une dépendance tiers sur un événement post-build Visual Studio qui nécessitera d'autres utilisateurs SVN d'avoir cet outil installé pour faire la construction.

Je veux ajouter une ligne de commande à l'événement après génération dans Visual Studio 2010 afin que les fichiers qui sont générés à partir de la modèles T4 pour les nouveaux objets de modèle EF se distribués aux dossiers de projets auxquels ils appartiennent, mais aussi des fichiers régénérées pour les objets existants ne pas modifier les fichiers potentiellement Ecraser de destination.

Depuis régénèrent du modèle T4, le fichier source est toujours plus récente, et je ne peux pas utiliser la « nouvelle » commutateur 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érons qui ne peuvent pas utiliser des classes partielles (par exemple générer un défaut EditorTemplate ou DisplayTemplate fichier * .ascx).

Quelqu'un a des problèmes similaires, ils ont résolu?

Était-ce utile?

La solution

For %F In ("C:\From\*.*") Do If Not Exist "C:\To\%~nxF" Copy "%F" "C:\To\%~nxF"

Autres conseils

  

Robocopy , ou "Fichier robuste Copier", est une commande de réplication d'annuaire de ligne de commande. Il est disponible dans le cadre du démarrage Kit de ressources Windows avec Windows NT 4.0 et a été présenté comme une caractéristique standard de Windows Vista, Windows 7 et Windows Server 2008.

   robocopy c:\Sourcepath c:\Destpath /E /XC /XN /XO

Pour élaborer (en utilisant Hydrargyrum, réponses HailGallaxar et Andy Schmidt):

  • /E fait Robocopy copie récursive des sous-répertoires, y compris ceux qui sont vides.
  • /XC les fichiers déjà existants avec le même horodatage, mais différent la taille des fichiers. Robocopy normalement les écrase.
  • /XN les fichiers déjà existants les plus récents que la copie dans la destination annuaire. Robocopy normalement les écrasent.
  • exclut /XO les fichiers existants plus âgés que la copie dans la destination annuaire. Robocopy normalement écrasements ceux-ci.

Avec les Changed, les personnes âgées et les nouvelles classes exclues, Robocopy fait exactement ce que veut l'affiche originale -. Sans avoir besoin de charger un environnement de script

Références: Technet , Wikipedia
Télécharger de: Microsoft Lien de téléchargement (lien dernière vérification le 30 mars 2016)

La solution de Bélisaire est bonne.

Pour élaborer cette réponse un peu laconique:

  • /E fait Robocopy copie récursive des sous-répertoires, y compris ceux qui sont vides.
  • /XC les fichiers déjà existants avec le même horodatage, mais différent la taille des fichiers. Robocopy normalement les écrase.
  • /XN les fichiers déjà existants les plus récents que la copie de la source annuaire. Robocopy normalement les écrasent.
  • exclut /XO les fichiers existants plus âgés que la copie de la source annuaire. Robocopy normalement écrasements ceux-ci.

Avec les Changed, les personnes âgées et les nouvelles classes exclues, Robocopy fait exactement ce que veut l'affiche originale -. Sans avoir besoin de charger un environnement de script

Vous pouvez essayer ceci:

echo n | copy /-y <SOURCE> <DESTINATION>

-y simplement invites avant et nous pouvons écraser n tuyaux à toutes ces questions. Donc, ce serait essentiellement simplement copier des fichiers non existants. :)

Ici, il est sous forme de fichier batch:

@echo off
set source=%1
set dest=%2
for %%f in (%source%\*) do if not exist "%dest%\%%~nxf" copy "%%f" "%dest%\%%~nxf"

Je veux juste préciser quelque chose de mes propres tests.

@Hydrargyrum a écrit:

  • / XN exclut les fichiers existants plus récents que la copie dans le répertoire source. Robocopy normalement les écrase.
  • / XO exclut les fichiers existants de plus de la copie dans le répertoire source. Robocopy normalement les écrase.

Ceci est en fait en arrière. XN ne « excluez les plus récents » fichiers, mais il exclut les fichiers qui sont plus récents que la copie dans le destination . XO ne « excluez plus ancien », mais il exclut les fichiers qui sont plus âgés que la copie dans le destination .

Bien sûr, faire vos propres tests, comme toujours.

Il y a une drôle de façon de le faire avec xcopy:

echo nnnnnnnnnnn | xcopy /-y source target

Il suffit d'inclure le plus grand nombre n de fichiers que vous copiez, et il répondra à n toutes les questions Ecraser.

robocopy src dst /MIR /XX

/ XX: fichiers et répertoires excluez "de" eXtra (présent à destination, mais pas à la source). Cela permettra d'éviter toute suppression de la destination. (Valeur par défaut)

Robocopy peut être téléchargée ici pour les systèmes où il n'est pas installé déjà. (Par exemple Windows Server 2003.)

http://www.microsoft.com/download/ fr / Details.aspx? displaylang = fr & id = 17657 (Aucun redémarrage nécessaire pour l'installation)

Rappelez-vous de définir votre chemin vers le robocopy exe. Pour ce faire, un clic droit « mon ordinateur »> Propriétés> Avancé> « Variables d'environnement », puis trouver la variable système de chemin et ajouter à la fin: « ; C: \ Program Files \ Windows Resource Kits de outils » ou partout où vous installé. Assurez-vous de laisser les chaînes variables de chemin qui sont déjà là et juste ajouter le chemin addtional.

une fois que le chemin est défini, vous pouvez exécuter la commande qui suggère Bélisaire. Il fonctionne très bien.

Il ne me laisse pas commenter directement les messages incorrects -. Mais permettez-moi de prévenir tout le monde, que la définition des / options XN et / XO sont inversées par rapport à ce qui a été écrit dans les messages précédents

L'option Exclure Older / fichiers les plus récents est compatible avec les informations affichées dans l'exploitation forestière de RoboCopy: RoboCopy itérera par la source, puis indiquer si chaque fichier dans la source est « Older » ou « NEWER » que le fichier dans la destination.

Par conséquent, / XO exclut ÂGÉES fichiers SOURCE (qui est intuitive), et non « plus que la source » comme cela avait été revendiquée ici.

Si vous voulez copier uniquement les nouveaux ou les fichiers source modifiés, mais éviter de remplacer les fichiers de destination plus récents, puis / XO est l'option correcte à utiliser.

Une approche simple serait d'utiliser l'option / MIR, pour refléter les deux répertoires. Fondamentalement, il copiera que les nouveaux fichiers à destination. Dans la prochaine COMAND remplacer la source et la destination avec les chemins d'accès à vos dossiers, le script recherchera tous les fichiers avec les extensions.

robocopy <source directory> <destination directory> *.* /MIR

est ce qui a fonctionné pour moi. J'utilise ceci pour « ajouter » fichiers sur l'autre disque, sans écrasements.

fichier batch: robocopy-missingfiles.bat

@echo off
echo Copying 
echo      "%1"
echo   to "%2"
echo.
echo Press Cntr+C to abort
Pause
echo.
@echo on
robocopy %1 %2 /Xo /XN /XC /J /SL /S /MT:8 /R:1 /W:1 /V /DCOPY:DAT /ETA /COPY:DATO /FFT /A-:SH /XD $RECYCLE.BIN "System Volume Information"

Exemple:

robocopy-missingfiles.bat f:\Working-folder\ E:\Backup-folder\

Test Do avant la mise en œuvre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top