J'ai besoin que mon programme fonctionne:
xcopy s:\* z:\ /E
Lorsque xcopy s'exécute, il demandera si un fichier doit être remplacé, donc je veux que le fichier de commandes réponde non dans tous les cas à l'invite.
Comment puis-je accomplir cela?
J'ai presque oublié cela dans les commutateurs moi-même. J'ai été aidé par un article d'Experts Exchange.
Voici le commutateur de signification:
/ D: m-d-y Copie les fichiers modifiés à la date spécifiée ou après. Si aucune date n'est indiquée, copie uniquement les fichiers dont l'heure source est plus récente que l'heure de destination.
La partie "Si aucune date n'est indiquée" est particulièrement importante. Cela ne répond pas exactement à la question "sans écraser les fichiers existants", mais il y répond si l'horodatage du fichier existant du fichier source n'est pas plus récent que le fichier de destination.
Assez proche pour le travail du gouvernement.
J'utilise les drapeaux suivants depuis des années. Il semble accomplir tous les comportements que vous décrivez dans la question.
xcopy s:\ z:\ /S /Y /D
S copiera tous les sous-dossiers et fichiers qu'ils contiennent Y empêche toute invite d'écrasement D copie essentiellement quelque chose de plus récent que ce qui est déjà dans la destination
xcopy ne peut pas être configuré pour ignorer les fichiers existants, vous devez donc copier à l'aide de "robocopy".
Cela fonctionne pour moi:
echo n|xcopy s:\* z:\ /E
Pour éviter la question y/n/all, vous pouvez simuler "taper" en utilisant la commande echo comme: echo n | xcopy blabla ... Mais ce n’est pas correct car toute question différente recevra aussi la réponse "n".
Un meilleur choix en cmd pour remplacer xcopy est: robocopy source: destination:/e [/ zb]
En mode graphique, il existe une application appelée "Teracopy" (utilisez Google pour la trouver) qui remplace la copie de l'Explorateur Windows avec plusieurs options (pause, ignorer [tout], écraser [tout], minimiser, ...) que j'aimerais recommander.
Interpréteur de commandes Windows:
for /f "delims=" %i in ('dir /b /s "source"') do (echo n | xcopy "%i" "destination" [switches] /-y)
Lot Windows:
for /f "delims=" %%i in ('dir /b /s "source"') do (echo n | xcopy "%%i" "destination" [switches] /-y)
N'oubliez pas de vous assurer qu'il vous invite avant de commencer à copier/écraser les fichiers.