Robocopy: espaces fantômes?
brucine Messages postés 21694 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Supposons que je veuille mettre en évidence la différence de fichiers entre source et destination, la commande:
ROBOCOPY "%source%" "%dest%" /L /MIR /NP /NJH /NDL /NFL /NJS
me retourne:
On a une première ligne vierge, et ce qui est supposé être des espaces entre les chaînes, on va balancer tout ce beau monde dans un fichier en supprimant la ligne vierge et l'espace après "*Fichier" dans l'idée d'ensuite séparer ces chaînes:
FOR /F "skip=1 tokens=1-5 delims= " %%a IN ('ROBOCOPY "%source%" "%dest%" /L /MIR /NP /NJH /NDL /NFL /NJS') DO (
ECHO %%b-%%c %%d >> Log.txt
)
Le résultat est:
*Fichier-SUPPL. 17956 G:\photos\antibes\Antibes.jpg
alors qu'il devrait être:
*Fichier-SUPPL. 17956
L'espace existe bien entre "Fichier" et "SUPPL." mais est une vue de l'esprit entre "17956" et "G".
Je peux toujours mettre au régime le premier "espace" en diminuant la première chaîne:
SET var1=%%b
SET var1=%var1:~0,-2%
mais pas la deuxième, parce que, sauf à mettre en place une usine à gaz qui testerait si le dernier caractère est ou pas numérique, je ne connais pas la longueur de "17956" et de ce qui suit.
Si par contre j'introduis manuellement un espace dans Log.txt après "SUPPL." et "17956", le comportement est celui attendu.
La moralité est que la syntaxe ROBOCOPY n'introduit pas après les chaînes d'espace mais un caractère spécifique, on a beau essayer de délimiter par * que le résultat est le même.
Quel est ce séparateur et comment peut-on le faire reconnaître à la ligne de commande?
Merci.
- Robocopy minlad
- Robocopy download - Télécharger - Utilitaires
2 réponses
Bonjour,
Le séparateur, c'est une tabulation (vue avec notepad++)
Pour for les délimiteurs par défaut sont l’espace et la tabulation.
Donc dans ta commande en supprimant delims= ,la tabulation devrait être prise en compte.
A+
Bonjour,
Si on regarde ta chaine en hexa
*Fichier-SUPPL. 17956 G:\photos\antibes\Antibes.jpg
le séparateur est hex 09, une tabulation
on peut imaginer dans un script de remplacer ce caractère par un autre ici ?
set "string=*Fichier-SUPPL. 17956 G:\photos\antibes\Antibes.jpg" echo %string% set "string=%string: =?%" echo %string% pause
ce qui donne
*Fichier-SUPPL. 17956 G:\photos\antibes\Antibes.jpg
*Fichier-SUPPL.?? 17956?G:\photos\antibes\Antibes.jpg
Appuyez sur une touche pour continuer...
Bonjour,
En effet, pourquoi pas, c'est une autre solution puis appliquer la commande FOR à ce nouveau délimiteur cette fois-ci intelligible.
Ne pas en mettre du tout comme proposé en <1> ou si on veut absolument un délimiteur entrer TAB en appuyant sur la touche comme évoqué en <2> est plus rapide.
Merci.
Bonjour,
En effet, j'ai cherché midi à 14 heures avec le délimiteur-de-la-mort-qui-tue sans penser à carrément les supprimer, puisque TAB est le délimiteur par défaut.
Juste par curiosité, le moyen "actif" consistant à échapper la tabulation ^T dans delims ne fonctionne pas, si par contre j'écris delims= puis que j'appuie sur la touche TAB avant la virgule si.
Merci beaucoup.