Fichier batch pour copier des fichiers d'un dossier vers un autre dossier


235

J'ai un dossier de stockage sur un réseau dans lequel tous les utilisateurs stockeront leurs données actives sur un serveur. Maintenant que ce serveur va être remplacé par un nouveau en raison d'un problème de place, je dois donc copier les fichiers des sous-dossiers de l'ancien dossier de stockage du serveur vers le nouveau dossier de stockage du serveur. J'ai ci-dessous ex:

de \ Oldeserver \ storage \ data & files vers \ New server \ storage \ data & files.


3
Je suppose que vous parlez d'un environnement Windows?
Alan Plum


4
@ HugoM.Zuleta, je connais les fichiers .bat. Mais le "fichier batch" ne garantit pas nécessairement un environnement Windows. L'utilisation du terme est antérieure à Windows (tout comme les fichiers .bat) et j'ai même vu des novices utiliser le terme pour signifier "scripts shell" dans les environnements * nix.
Alan Plum

1
@pluma Je suis d'accord, et c'est principalement parce qu'ils se réfèrent aux opérations par lots effectuées par les outils de script de leur système d'exploitation.
Hugo M. Zuleta

Réponses:


441

xcopy.exe est certainement votre ami ici. Il est intégré à Windows, donc son coût n'est rien.

Juste xcopy /s c:\source d:\target

Vous voudrez probablement modifier quelques éléments; certaines des options que nous ajoutons également incluent celles-ci:

  • /s/e - copie récursive, y compris la copie de répertoires vides.
  • /v- ajoutez ceci pour vérifier la copie par rapport à l'original. plus lent, mais pour le paranoïaque.
  • /h - système de copie et fichiers cachés.
  • /k- copier les attributs en lecture seule avec les fichiers. sinon, tous les fichiers deviennent en lecture-écriture.
  • /x- si vous vous souciez des autorisations, vous voudrez peut-être /oou /x.
  • /y - ne pas demander avant d'écraser les fichiers existants.
  • /z- si vous pensez que la copie peut échouer et que vous souhaitez la redémarrer, utilisez-la. Il place un marqueur sur chaque fichier lors de sa copie, vous pouvez donc réexécuter la commande xcopy pour reprendre là où elle s'était arrêtée.

Si vous pensez que xcopy peut échouer à mi-chemin (comme lorsque vous copiez sur une connexion réseau instable), ou que vous devez l'arrêter et que vous souhaitez continuer plus tard, vous pouvez utiliser xcopy /s/z c:\source d:\target.

J'espère que cela t'aides.


2
@Iavinio Il demande un fichier ou un répertoire lors de la copie d'une archive. Y a-t-il un moyen de supprimer cela?
Bitterblue

Salut @ mini-me - J'ai trouvé que s'il s'agit d'un répertoire, vous pouvez spécifier un caractère '/' de fin et vous ne verrez pas ce message.
DaveDev

2
/i- Si la destination n'existe pas et copie plusieurs fichiers, suppose que la destination doit être un répertoire.
lavinio

1
Comment copier un seul fichier du répertoire?
Charan Raju CR

10
Pour contourner l'invite "fichier ou répertoire", faites la commande comme ceci ... echo f | xcopy /s /f srcfile destfile
wintondeshong

56

Mon préféré pour sauvegarder les données est:

ROBOCOPY "C:\folder" "C:\new_folder" /mir

/ mir est pour miroir. Vous pouvez également utiliser / mov pour déplacer des fichiers. Il reproduit exactement le même dossier. Il peut supprimer / écraser les fichiers selon les besoins. Fonctionne très bien pour moi. C'est plus rapide que xcopy / copy. Il est également intégré à Windows.

Source: http://technet.microsoft.com/en-us/library/cc733145.aspx


2
J'appuie cela. C'est vraiment rapide. beaucoup plus rapide que xcopy
Ike

Existe-t-il un moyen de supprimer récursivement thumbs.db similaire à cela?
drooh

54

Juste pour être clair, lorsque vous utilisez xcopy /s c:\source d:\target, placez "" autour de c: \ source et d: \ target, sinon vous obtenez une erreur.

c'est-à-dire s'il y a des espaces sur le chemin c'est-à-dire si vous avez:

"C:\Some Folder\*.txt"

mais pas obligatoire si vous avez:

C:\SomeFolder\*.txt

1
Les guillemets ont fait l'affaire;) merci j'ai également utilisé / Y pour remplacer le fichier s'il existe :) Exemple: ´´´xcopy / s "c: \ source" "d: \ target" / Y ''
Joel Carneiro

18

Vous voudrez peut-être jeter un œil à XCopy ou RoboCopy, qui sont des solutions assez complètes pour presque toutes les opérations de copie de fichiers sur Windows.


3
RoboCopy semble être meilleur que XCopy car xcopy demande des décisions de fichier ou de dossier. Et je ne peux pas refuser. Il DOIT être capable de fonctionner entièrement automatique.
Bitterblue

@ mini-moi, je sais que c'est très tard, mais je ne trouve pas le même commutateur pertinent. J'ai fini par recourir à lui faire créer un fichier vierge avec le même nom que je copie, puis l'écraser. Si le fichier existe déjà, il ne prend pas la peine de demander s'il s'agit d'un fichier ou d'un répertoire. (Si vous voulez un répertoire automatique, vous pouvez ajouter un '/' au chemin et il le fera). J'espère que cela aide les futures personnes!
Tom C

2
@Eve Pour référence, echo f | xcopy source destination /yle rendra automatique. Il attribue à toutes les questions un "f" comme réponse. Il passera également les demandes d'écrasement (f est considéré comme oui, je pense).
ndm13

14

Pour contourner le 'spécifier un nom de fichier ou un nom de répertoire sur la cible (F = fichier, D = répertoire)?' avec xcopy, vous pouvez effectuer les opérations suivantes ...

echo f | xcopy /f /y srcfile destfile

ou pour ceux d'entre nous qui copient simplement de grandes sous-structures / dossiers:

utilisez / i qui spécifie que la destination doit être un répertoire si vous copiez plusieurs fichiers


(écho "f" pour les fichiers ou "D" pour les répertoires)
JinSnow

essayer de le faire maintenant et cela ne fonctionne pas - je reçois toujours des invites lorsque j'essaie de copier un fichier dans un autre répertoire. Utiliser Win 10 si cela l'affecte du tout echo f | xcopy / f / y "My.dll" "C: \ myFolder \ My.dll". Je l'ai essayé avec une combinaison d'autres commutateurs en vain (et F majuscule)
Prof

3

si vous voulez copier un fichier sans utiliser de chemin absolu, chemin relatif en d'autres termes:

n'oubliez pas d'écrire une barre oblique inverse dans le chemin ET PAS une barre oblique

exemple :

    copy children-folder\file.something .\other-children-folder

PS: le chemin absolu peut être récupéré à l'aide de ces caractères génériques appelés "paramètres de lot"

    @echo off
    echo %%~dp0 is "%~dp0"
    echo %%0 is "%0"
    echo %%~dpnx0 is "%~dpnx0"
    echo %%~f1 is "%~f1"
    echo %%~dp0%%~1 is "%~dp0%~1"

consultez la documentation ici sur la copie: https://technet.microsoft.com/en-us/library/bb490886.aspx

et également ici pour la documentation des paramètres de lots: https://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/percent.mspx?mfr=true


Je pense que \ est appelé barre oblique inverse.
Leon Bohmann

2
@echo off

rem The * at the end of the destination file is to avoid File/Directory Internal Question.

rem You can do this for each especific file. (Make sure you already have permissions to the path)
xcopy /Y "\\Oldeserver\storage\data\MyFile01.txt" "\\New server\storage\data\MyFile01.txt"*
pause

rem You can use "copy" instead of "xcopy "for this example.

0

Regardez l' rsyncoutil Windows basé NASBackup . Ce sera un bonus si vous êtes familiarisé avec les commandes rsync.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.