web-dev-qa-db-fra.com

Comment refuser à tous les messages "voulez-vous écraser" dans une copie de fichier batch?

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

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

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

En d’autres termes, je veux tout copier d’un répertoire qui existe pas existe déjà dans la cible.

La chose la plus proche que je vois est l'argument XCOPY pour ne copier que les choses après une date-heure spécifique.

51
JosephStyons

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

69
Kev
echo "No" | copy/-Y c:\source c:\Dest\
28
krishnan

Vous pouvez créer un fichier texte avec une seule longue ligne de "n", puis exécuter votre commande et mettre <nc.txt après celle-ci. Je l’ai fait pour copier plus de 145 000 occurrences où «je ne voulais pas écraser» était ce que je voulais et cela a bien fonctionné.

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

21
Chris

Voici une solution de contournement. Si vous voulez 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 . Copiez C en B.

11
Liam

J'utilise XCOPY avec les paramètres suivants pour copier des 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.
6
chitza

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

xcopy {Source} {Destination} /E /D 

Copie sans écrasement pour récupérer les fichiers nouveaux ou ayant peut-être déjà échoué pour une raison quelconque.

Essayez, ça marche.

6

Je pense que xxcopy a une 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

5
Adam Davis

cela fonctionne bien

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

Essaye ça:

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

Copiez cette ligne dans le bloc-notes et enregistrez-le en tant que 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.

testez-le. J'ai créé un fichier .txt avec quelques travaux, exécuté le script, modifié le libellé du fichier .txt et réexécuté le script; il remplace uniquement 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)
3
Jeff Tondreau

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 par "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 aide le prochain gars.

3
ammills01

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

3
Lufi

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 créer la copie originale que vous étiez en train de créer, ainsi que "oui à tous". Cela devrait vous donner les mêmes résultats.

2
tloach

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

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

Peut-être aide quelqu'un.

0
blinker

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

0
John Salter