Stray newline dans la redirection de fichier

J’ai un script batch avec les deux lignes suivantes.

svnversion . > myversion.txt set /p MyVersion=<myversion.txt 

Cela a toujours fonctionné sans aucun problème, svnversion produit une ligne avec le numéro de révision du sandbox et la ligne suivante assigne ce numéro de révision à une variable d’environnement.

Depuis quelques semaines, ce comportement est rompu et je ne sais pas quelle est la cause. Je sais quel est l’effet.

Sur mon système (et uniquement sur mon système, pas sur celui de mon collègue), le fichier de capture «myversion.txt» ne comporte plus une ligne avec le numéro de révision mais deux lignes. La première ligne est vide et la ligne suivante contient le numéro de révision.

Si je regarde avec un éditeur hexadécimal, je peux voir “0d0a32 …” comme contenu.

Si je lance la commande sans capturer la sortie, aucune ligne vide n’est produite. par exemple:

 c:...>svnversion . 22837 c:...>_ 

Si je lance la même commande sur le système de mon collègue, la ligne vide n’apparaît pas dans le résultat capturé. Nous avons tous les deux des systèmes identiques.

En conséquence, je ne peux plus utiliser le script pour capturer le numéro de révision svn.

Questions: – Quelqu’un a-t-il une idée de la cause de la nouvelle ligne dans le résultat capturé? – Existe-t-il un autre moyen de capturer le numéro de révision de svn dans un environnement de fichiers batch?

Sincères amitiés.

Vous pouvez essayer comme ceci:

 @echo off for /f %%a in (myversion.txt) do set "MyVersion=%%a" echo Version = %MyVersion% 

Je n’ai jamais utilisé svnversion – mais c’est étrange que le fichier soit différent sur les deux machines. Peut-être y a-t-il une différence dans les mises à jour qui ont été appliquées?

Peut-être

  for /f %%a in ('svnversion . ') do set "MyVersion=%%a" 

produirait un système viable, mais la cause profonde du problème devrait vraiment être étudiée et résolue.

Informations complémentaires (liées à Subversion):

Le comportement de svnversion change lors de la redirection de la sortie (!?)

 c:\...>svnversion . 22923:22924M c:\...>svnversion . >temp.txt c:\...>type temp.txt M 22923:22924 

Notez que la sortie non redirigée place le «M» (indicateur de sandbox modifié) à la fin des numéros de révision et dans la sortie redirigée sur la première ligne.

Je ne sais pas pourquoi (ou comment) cela est fait. Mais hier, je travaillais avec un bac à sable non modifié et j’ai obtenu une ligne vide dans la sortie redirigée. Aujourd’hui, j’ai modifié le bac à sable mais il me manquait le «M» dans mes rapports. Maintenant je sais pourquoi!

Et voici un script pour tout remettre ensemble. (brut mais ça marche pour moi, les suggestions pour l’améliorer sont les bienvenues.)

 :: :: test.cmd - concatinate output from svnversion :: if '%1'=='SVNREV' goto svnrev set SVNREV= for /f %%a in ('svnversion .') do call test.cmd SVNREV %%a echo SVNREV=%SVNREV% goto end :svnrev set SVNREV=%2%SVNREV% goto end :end 

Notez que ce qui suit ne fonctionne pas . (ne me demande pas pourquoi)

 set SVNREV= for /f %%a in ('svnversion .') do set SVNREV=%%a%SVNREV% echo SVNREV=%SVNREV% 

Ceci est un bogue connu pour au moins SVN 1.9.1.

Décrit et reconnu par Stefan Küng à Re: 1.9.1 bug dans svnversion?