Comment refuser à tous & # 8220; voulez-vous écraser & # 8221; invite dans une copie de fichier batch?

StackOverflow https://stackoverflow.com/questions/191209

  •  08-07-2019
  •  | 
  •  

Question

Par défaut, la copie à partir de l'invite de commande vous invitera à remplacer les fichiers déjà présents à l'emplacement cible.

Vous pouvez ajouter " / Y " dire "Oui à tous" remplacements.

Mais comment pouvez-vous dire "Non à tous"? ?

En d'autres termes, je souhaite tout copier d'un répertoire qui n'existe pas dans la cible.

La chose la plus proche que je vois est l'argument XCOPY qui consiste à ne copier que des choses après une date de modification spécifique.

Était-ce utile?

La solution

Sauf s'il existe un scénario dans lequel ne ne souhaitons pas copier dans la source les fichiers existants qui ont changé depuis la dernière copie, pourquoi ne pas utiliser XCOPY avec / D sans spécifier de date?

Autres conseils

echo "No" | copy/-Y c:\source c:\Dest\

Vous pouvez créer un fichier texte avec une seule longue ligne de "n". puis lancez votre commande et mettez < nc.txt après. Je l’ai fait pour copier plus de 145 000 occurrences où "Pas d’écrasement". était ce que je voulais et cela a bien fonctionné de cette façon.

Ou vous pouvez simplement maintenir la touche n enfoncée avec quelque chose, mais cela prend plus de temps que d'utiliser < pour l'acheminer.

Voici une solution de contournement. Si vous souhaitez tout copier de A qui n’existe pas déjà dans B:

Copiez A dans un nouveau répertoire C. Copiez B en C, en écrasant tout ce qui se chevauche avec A. Copier C en B.

J'utilise XCOPY avec les paramètres suivants pour la copie d'assemblys .NET:

/D /Y /R /H 

/D:m-d-y - Copies files changed on or after the specified date. If no date is given, copies only those files whose source time is newer than the destination time.

/Y - Suppresses prompting to confirm you want to overwrite an existing destination file.

/R - Overwrites read-only files.

/H - Copies hidden and system files also.

Je sais que vous pensez tous / D: la date utilisera des trucs de date, mais juste / D sans le: fait exactement ce que nous voulons afin ...

xcopy {Source} {Destination} /E /D 

Copiera sans écraser pour récupérer les fichiers nouveaux ou qui ont peut-être déjà échoué pour une raison quelconque.

Essayez, ça marche.

Je pense que xxcopy a un option pour cela.

Bingo:

http://www.xxcopy.com/xxcopy27.htm#tag_231

2.3   By comparison with the file in destination

    The switches in this group select files based on the
    comparison between the files in the source and those in
    the destination.  They are often used for periodic backup
    and directory synchronization purposes. These switches
    were originally created as variations of directory backup.
    They are also convenient for selecting files for deletion.

2.3.1  by Presence/Absence

    The /BB and /U switches are the two switches which select
    files by the pure presence or absence as the criteria.
    Other switches in the this group (Group 2.3) are also
    affected by the file in the destination, but for a
    particular characteristics for comparison's sake.

    /BB  Selects files that are present in source but not in destination.
    /U   Selects files that are present in both source and destination.

-Adam

cela fonctionne bien

no | cp -rf c:\source c:\Dest\

echo N | copier / -y $ (SolutionDir) SomeDir $ (OutDir)

Essayez ceci:

robocopy "source" "destination" /e /b /copyall /xo /it

Copiez cette ligne dans le bloc-notes et enregistrez-le sous forme de fichier .bat. Exécutez le fichier et tout sera copié de la source à la destination. Lorsque vous l'exécutez à nouveau, il ne remplacera pas les fichiers identiques. lorsque vous modifiez ou modifiez un fichier, il remplace le fichier à la destination.

le tester. J'ai créé un fichier .txt avec quelques travaux, j'ai exécuté le script, modifié le libellé du fichier .txt, puis réexécuté le script; il ne remplace que le fichier de modification de la source.

/e=Copies subdirectories. Note that this option includes empty directories
/b=Copies files in Backup mode
/copyall=Copies all file information
/xo=Excludes older files. (this is what prevents it from copy the same file over and over)
/it=Includes "tweaked" files. (this will allow the copy and replace of modified files)

Merci pour cela. J'utilise l'utilitaire de ligne de commande AzCopy (v 3.1.0.93) pour déplacer environ 1 million de fichiers de mon PC local vers mon stockage de blob Azure. J'ai des doublons et je ne peux pas garder la copie pour répondre à chaque invite et je ne veux pas télécharger à nouveau le même fichier.

L'utilitaire AzCopy propose une commande / Y pour supprimer les invites de confirmation, mais finit par lui demander de remplacer le fichier de destination. En empruntant cette voie, j’ai été en mesure de ne PAS re-télécharger le fichier. Cependant, cela semble être un peu un bidouillage, car il ne répond pas réellement à l'invite avec le message "Non", mais l'erreur "Aucune entrée n'est reçue lorsque l'utilisateur doit faire un choix parmi plusieurs options données". mais ne télécharge pas le fichier.

Voici la commande que j'ai utilisée: echo n | AzCopy / Source: " {chemin du fichier} " / Dest: " {URL de stockage d'objets blob} " / DestKey: {clé}

J'espère que cela aidera le prochain.

En fonction de la taille et du nombre de fichiers copiés, vous pouvez copier le répertoire de destination par-dessus le fichier source avec "oui à tous", puis effectuez la copie originale que vous étiez en train de faire, ainsi que "oui à tous". ensemble. Cela devrait vous donner les mêmes résultats.

Nous avons utilisé "robocopy". via " invoke-command " copier une quantité énorme de machines virtuelles dans notre environnement. Nous avons découvert que "robocopy" sort de manière inattendue parfois et tout le processus va vers le bas. Nous avons donc décidé d'utiliser "xcopy". Nous vérifions maintenant son travail et "créer". "Pas pour tous" option nous utilisons cette fonction (powershell):

function gen_long_no ([chaîne] $ chemin) {     $ result = = " ;; Get-ChildItem $ path -Recurse | ? {if ($ _. PSIsContainer -eq $ false) {$ result + = "& n" }};     return $ result }

Peut-être aide-t-il quelqu'un.

L'ajout de commutateurs pour les sous-répertoires et la vérification fonctionnent parfaitement.  echo n | xcopy / -Y / s / e / v c: \ source *. * c: \ Dest \

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