Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Redirection du flux stderr de Robocopy

6 réponses
Avatar
sympatix
Bonjour,

Dans une invite de commandes, j'essaye en vain de rediriger la sortie
d'erreur (stderr) de robocopy dans un fichier texte. Le fichier est bien
créé
(D:\ERo.txt), mais, malgré une erreur volontaire que j'ai généré avec
"cacls.exe" en bridant la modif du dossier cible, elle ne s'y inscrit pas,
le fichier reste vide. Par contre, elle y est bien mentionnée dans le
fichier log. Est-ce un comportement normal, je veux dire par là, n'y a-t-il
aucun flux séparé pour le log et les erreurs, ou bien y a-t-il quelque chose
que je ne fais pas bien ? (je précise que je je ne suis pas trop familarisé
dans les syntaxes des lignes de commandes)
Je précise aussi par ailleurs que robocopy fait correctement son travail de
synchro, quand je débride le dossier cible.
Ci dessous, les infos, et les tests que j'ai effectués:

Version de Robocopy: Produit: XP010, Fichier: 5.1.1.1010
Options: Synchro mirroir, Nombres d'essais si erreur: 1(R:1), temps
d'attente entre 2 essais: 0(W:0), répertoires non listés dans le log(NDL),
nom complet des fichiers dans le log(FP), fichier log
activé:(log:"D:\LogRo.txt).

Path de robocopy: D:\robocopy.exe
Path dossier source: E:\source
Path dossier cible: E:\cible
Path fichier log: D:\LogRo.txt
Path fichier d'erreurs: D:\ERo.txt

Ci-dessous, la ligne de commandes: (désolé pour les coupures de ligne)
"D:\robocopy.exe" "E:\source" "E:\cible" /mir /NDL /FP /R:1 /W:0
/log:"D:\LogRo.txt" 2>D:\ERo.txt

Merci d'avance pour toute aide :-)
--
Cordialement
saint_path_x_arobase_t'es_laide_euh_point_fr

(Antispam: Ôter les "toto" dans l'adresse, pour me répondre)

6 réponses

Avatar
Gilles LAURENT
"sympatix" a écrit dans le
message de news:
| Bonjour,

Bonjour,

| Dans une invite de commandes, j'essaye en vain de rediriger la sortie
| d'erreur (stderr) de robocopy dans un fichier texte. Le fichier est
| bien créé mais reste vide.
[...]

L'outil Robocopy n'utilise pas le flux stderr. Toutes les traces sont
redirigées sur le flux stdout ou dans le fichier log. Le fichier log
respecte toutefois une convention de formatage qui devrait simplifier
son analyse (C.f "Text Tags" à la fin du document Robocopy.doc). De
plus, le résultat du traitement est consigné dans la variable
d'environnement ErrorLevel (C.f "Return Code").

--
Gilles LAURENT
http://glsft.free.fr
Avatar
Michel Claveau
Bonjour !

Robocopy n'utilise pas le flux stderr




C'est très vrai, et c'est voulu. Robocopy (ROBust_COPY) doit pouvoir
continuer, même s'il rencontre des erreurs.
Or, dans certains cas, le simple fait d'écrire dans le flux stderr
pourrait interrompre le déroulement (normal ?) d'un script.

--
@-salutations

Michel Claveau



Avatar
sympatix
Bonjour Gilles LAURENT, dans le message
news:
tu nous disais:
L'outil Robocopy n'utilise pas le flux stderr. Toutes les traces sont
redirigées sur le flux stdout ou dans le fichier log.
ça confirme mes investigations


L'outil Robocopy n'utilise pas le flux stderr. Toutes les traces sont
redirigées sur le flux stdout ou dans le fichier log. Le fichier log
respecte toutefois une convention de formatage qui devrait simplifier
son analyse (C.f "Text Tags" à la fin du document Robocopy.doc).
D'accord


De plus, le résultat du traitement est consigné dans la variable
d'environnement ErrorLevel (C.f "Return Code").
Effectivement, c'est magnifique, j'arrive à récupérer cette variable dans un

fichier texte comme suit:
if errorlevel 0 echo %errorlevel% >D:ERo.txt

Petite remarque:
Je ne comprend pas pourquoi, quand errorlevel me retourne le code 8, j'ai un
code 5 dans le log, extrait du log:
------Log-------------
New File 0 E:sourceschmurtz.txt
2006/11/26 10:09:50 ERROR 5 (0x00000005) Copying File E:sourceschmurtz.txt
AccSs refus,.
-------Log-----------
Alors que Errorlevel est égal à 8.

Merci
--
Cordialement
saint_path_x_arobase_t'es_laide_euh_point_fr

(Antispam: Ôter les "toto" dans l'adresse, pour me répondre)

Avatar
sympatix
Bonjour Michel Claveau, dans le message
news:
tu nous disais:
Bonjour !

Robocopy n'utilise pas le flux stderr




C'est très vrai, et c'est voulu. Robocopy (ROBust_COPY) doit pouvoir
continuer, même s'il rencontre des erreurs.
Or, dans certains cas, le simple fait d'écrire dans le flux stderr
pourrait interrompre le déroulement (normal ?) d'un script.


Bonjour, et merci pour ces précisions :-)
--
Cordialement
saint_path_x_arobase_t'es_laide_euh_point_fr

(Antispam: Ôter les "toto" dans l'adresse, pour me répondre)




Avatar
Gilles LAURENT
"sympatix" a écrit dans le
message de news:%

[...]
| Petite remarque:
| Je ne comprend pas pourquoi, quand errorlevel me retourne le code 8,
| j'ai un code 5 dans le log, extrait du log:
| ------Log-------------
| New File 0 E:sourceschmurtz.txt
| 2006/11/26 10:09:50 ERROR 5 (0x00000005) Copying File
| E:sourceschmurtz.txt AccSs refus,.
| -------Log-----------

Dans le fichier log apparaît l'erreur Win32 ERROR_ACCESS_DENIED (5)
provoqué par l'API Win32 CopyFileEx. Cette erreur Win32 indique
effectivement un problème d'accès refusé à une ressource. Le code
d'erreur consigné dans la variable d'environnement ErrorLevel est quant
à lui spécifique à l'outil Robocopy. Celui-ci est toujours compris en 0
et 16 et spécifie uniquement le type d'erreur.

--
Gilles LAURENT
http://glsft.free.fr
Avatar
sympatix
Dans le fichier log apparaît l'erreur Win32 ERROR_ACCESS_DENIED (5)
provoqué par l'API Win32 CopyFileEx. Cette erreur Win32 indique
effectivement un problème d'accès refusé à une ressource. Le code
d'erreur consigné dans la variable d'environnement ErrorLevel est quant
à lui spécifique à l'outil Robocopy. Celui-ci est toujours compris en 0
et 16 et spécifie uniquement le type d'erreur.


Merci encore pour cette réponse précise et concise :-)
--
Cordialement
sympatix