2009-03-30 9 views
0

Comment se débarrasser des espaces intermédiaires dans une variable d'environnement? Supposons que le fragment de boucle for suivant obtienne la taille d'espace disque libre d'un disque donné.Comment se débarrasser des espaces intermédiaires dans une variable d'environnement

for /f "tokens=3" %%i in ('dir ^| find "Dir(s)"') do set size=%%i 

entraînerait quelque chose comme ça

C:\>set size=129,028,096 

Je voudrais vous débarrasser de délimiteurs comme suit.

for /f "delims=," %%i in ('echo %size%') do set size=%%i 

et a donné quelque chose comme ça

set size=129 028 096 

Comment puis-je obtenir sans espaces ou milieu délimiteurs avec les outils natifs?

Répondre

1

Vous pouvez utiliser

set size=%size: =% 

après qui remplacera tous les espaces avec rien.

Mais vous pouvez aussi le faire avec des virgules :)

Mais gardez à l'esprit que (a) les changements de délimitation, il est un point pour moi, pas une virgule. Cela peut dépendre de la langue de votre système d'exploitation ou des paramètres régionaux. Et (b) vous ne pouvez pas vraiment faire des maths avec cette valeur après que cmd est limité à maths 32 bits signés (en utilisant set /a). Soit dit en passant, votre deuxième instruction for ne fonctionnera pas correctement, car elle va simplement définir size sur le dernier groupe de chiffres.

Cela peut être contournée, mais je préfère conseille d'utiliser le remplacement directement sur virgules/points:

set size=%size:,=% 
set size=%size:.=% 
+0

Merci beaucoup des thats exceptionnel peut-je le faire en une seule étape –

+0

vous remercie beaucoup –

+0

Moins de deux lignes probablement pas. Mais cela devrait être assez court. Vous pouvez essayer d'utiliser tokenizing puis simplement concaténer chaque jeton, mais en fonction de la taille de votre disque dur, cela peut entraîner un jeton de plus ou de moins ... ce n'est certainement pas idéal. J'irais avec votre première ligne et ensuite remplacer toutes les virgules. – Joey

Questions connexes