Comment puis-je rendre robocopy silencieux dans la ligne de commande, sauf pour la progression?

105

J'utilise robocopy pour faire des sauvegardes avec un script PowerShell, et c'est assez génial, sauf que j'aimerais qu'il n'affiche que le pourcentage de progression pendant qu'il copie et pas toutes les autres informations.

Les autres informations encombrent la fenêtre de commande, que je nettoierais et simplement pour qu'il soit facile de voir la progression globale de la sauvegarde.

Est-ce possible?

Merci, Andrew

AndyGeek
la source

Réponses:

192

J'ai ajouté les 2 paramètres suivants: /np /nfl

Donc, avec les 5 paramètres de la AndyGeek'sréponse, /njh /njs /ndl /nc /nsvous obtenez ce qui suit et c'est silencieux:

ROBOCOPY [source] [target] /NFL /NDL /NJH /NJS /nc /ns /np

/NFL : No File List - don't log file names.
/NDL : No Directory List - don't log directory names.
/NJH : No Job Header.
/NJS : No Job Summary.
/NP  : No Progress - don't display percentage copied.
/NS  : No Size - don't log file sizes.
/NC  : No Class - don't log file classes.
R. Koene
la source
2
Il y a toujours un message «100%» affiché.
Scott Chu
13
Cela imprime toujours une seule ligne vide qui est visible dans les fichiers batch.
wqw
7
/nc /nsn'est pas nécessaire lorsque /nfl /ndlest spécifié.
Vojtěch Dohnal
3
@wqw, ajoutez simplement un> NUL à l'EOL, et la ligne vide est l'historique.
Herb
2
@ScottChu Ceci imprime 100% lorsque vous utilisez le commutateur / mt. Je suppose que vous devrez décider si vous voulez le multithread, ou aucun% s affiché
Pain
40

Je l'ai fait en utilisant les options suivantes:

/njh /njs /ndl /nc /ns

Notez que le nom du fichier s'affiche toujours, mais cela me convient.

Pour plus d'informations sur robocopy, accédez à http://technet.microsoft.com/en-us/library/cc733145%28WS.10%29.aspx

AndyGeek
la source
3
/ nfl pour supprimer le nom de fichier
xagyg
12
Apparaît si vous utilisez /mirou si /purgeles fichiers supplémentaires sont toujours enregistrés. Impossible de trouver un moyen de désactiver cela.
bbodenmiller
1
notez qu'avec robocopy, la barre de progression n'est que de% par fichier, ne montre pas la progression avec le nombre total d'octets copiés sur le total /% de cela.
barlop le
Très intéressant appréciation @bbodenmiller ... Très ennuyeux journalisation de ces fichiers ...
toscanelli
18

Si vous ne voulez aucune sortie, c'est le moyen le plus simple:

robocopy src dest > nul

Si vous avez encore besoin d'informations et que vous ne souhaitez supprimer que des parties de la sortie, utilisez les paramètres de R.Koene'sanswer.

SHernandez
la source
5
Je teste > log:nulsous win8.1 x64, il y a un fichier journal vide. > nulfonctionne comme prévu.
Ivan Yan
1
Le logfichier "vide" que cela génère n'est même pas vraiment vide. Il s'agit simplement d'enregistrer les données dans un flux alternatif invisible pour Explorer, mais toujours présent sur le disque. (Vous pouvez vérifier en utilisant la dir /rcommande pour l'afficher.) @IvanYan est correct, > nulest la commande correcte pour supprimer complètement la sortie.
jmbpiano
16

Dans PowerShell, j'aime utiliser:

robocopy src dest | Out-Null

Cela évite d'avoir à se souvenir de tous les commutateurs de ligne de commande.

Aaron Tribou
la source
En faisant cela, il a immédiatement tué la commande sans avertissement. J'utilisais /PURGE.
Sawtaytoes
Out-Null ne devrait avoir aucun effet sur l'exécution de la commande robocopy. Il redirige simplement le flux de sortie. msdn.microsoft.com/en-us/powershell/reference/4.0/... Vous pouvez essayer de supprimer Out-Null pour voir si la sortie rejetée offre un indice sur ce qui se passe.
Aaron Tribou
2

Une solution de contournement, si vous voulez qu'il soit absolument silencieux, consiste à rediriger la sortie vers un fichier (et éventuellement le supprimer plus tard).

Robocopy src dest > output.log
del output.log
HSM
la source
6
aussi> NUL élimine simplement la sortie, aucun fichier à craindre.
Sellorio
1
ou pipe Out-Nulldans PowerShell
orad
2

robocopy a également tendance à imprimer des lignes vides même s'il ne fait rien. Je filtre les lignes vides en utilisant une commande comme celle-ci:

robocopy /NDL /NJH /NJS /NP /NS /NC %fromDir% %toDir% %filenames% | findstr /r /v "^$"
TarmoPikaro
la source
0

Le> null ne fonctionne pas dans les guillemets. Il voit le> null comme nom de fichier du lot.

La robocopy aucune sortie n'a fonctionné !!!

Voici le nouveau fichier batch:

robocopy /mir /B /r:1 /nfl /ndl /njh /njs /nc /ns /np c:\EnvBackup c:\offsite_backup\EnvBackup

robocopy /mir /B /r:1 /nfl /ndl /njh /njs /nc /ns /np c:\shares c:\offsite_backup\shares

robocopy /mir /B /r:1 /nfl /ndl /njh /njs /nc /ns /np c:\Quickbooks_Backup c:\offsite_backup\Quickbooks_Backup
Jason L
la source
-1

Il n'est pas nécessaire de rediriger vers un fichier et de le supprimer plus tard. Essayer:

Robocopy src dest > null 
areB
la source
2
Cela crée un fichier nullet y écrit le journal. Il le calme dans la ligne de commande au prix d'écritures sur le lecteur de stockage.
Sawtaytoes