Robocopy: espaces fantômes?

Fermé
brucine Messages postés 14341 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 28 avril 2024 - 14 mars 2023 à 10:18
brucine Messages postés 14341 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 28 avril 2024 - 14 mars 2023 à 13:10

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.



 

2 réponses

hypothetix Messages postés 191 Date d'inscription dimanche 19 janvier 2020 Statut Membre Dernière intervention 24 avril 2024 53
14 mars 2023 à 12:11

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+

1
brucine Messages postés 14341 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 28 avril 2024 1 818
14 mars 2023 à 12:54

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.

0
jee pee Messages postés 39659 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 28 avril 2024 9 240
14 mars 2023 à 12:57

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...


0
brucine Messages postés 14341 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 28 avril 2024 1 818
14 mars 2023 à 13:10

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.

0