Supprimer l'espace à la fin de l' /F
Salut les gars, je suis en train d'utiliser le FOR /F
de commande dans le fichier de commandes, mais je vais avoir un problème.
Je le lance....
rem finding model number
for /F "delims= skip=1 tokens=*" %%a in ('wmic csproduct get name') do if not defined model set model=%%a
et il fonctionne bien, j'obtiens le résultat que je veux
result: 637263G
Maintenant, disons que j'ai créer un dossier appelé "637263G" en vertu de c:\windows\
eg:c:\windows7263G\test
et je créer un batch pour aller sur le chemin...
for /F "skip=1 tokens=*" %%a in ('wmic csproduct get name') do if not defined model set model=%%a
cd windows\%model%\test
................................
cette bombes parce que l' %modèle% est de retour "c:\windows\637263G \test"
et pas "c:\windows\637263G\test"
C'est en laissant un espace après le nom du modèle.
Personne ne sait comment faire pour supprimer l'espace à l'arrière?
OriginalL'auteur user2072055 | 2013-02-14
Vous devez vous connecter pour publier un commentaire.
vous pouvez supprimer tout l'espace en %%par l'aide de la substitution :
set a=%a: =%
pour un normal variable, retirer le premier%%
. Pour un paramètre de la substitution ne fonctionne pasmerci pour le heads up, vous pourriez avoir édité ma réponse 😉
Certains ordinateurs ont des espaces au milieu de la valeur, ce n'est donc pas une bonne option.
OriginalL'auteur Loïc MICHEL
Vous ne devez pas supprimer tous les espaces, que certaines réponses suggèrent, car certains ordinateurs ont des espaces au milieu de la valeur. Voir Liste des WMIC CSProduct Obtenir des Résultats de Nom.
Non seulement puis-je obtenir plusieurs espaces, j'ai aussi une fuite de retour de chariot (
<CR>
) qui est un artefact de la conversion automatique des WMIC unicode de sortie en ASCII.La fuite
<CR>
peut être retiré en passant la valeur à travers une autre POUR /F en boucle. Cela supprime également le fantôme de la "vierge" de la ligne (en fait, un<CR>
), de sorte que SI l'instruction n'est plus nécessaire.Les espaces peuvent être enlevés à l'aide de la
~nx
modificateur. Cela fonctionne parce que les noms de fichiers ne peuvent pas se retrouver avec un espace ou un point et sont automatiquement supprimés par le système d'exploitation. Les modificateurs de normaliser le "nom de fichier" en supprimant les points de fuite et des espaces. Cela ne fonctionnera pas correctement si la valeur contient des\
,/
,*
, ou?
, ou si elle commence par une lettre suivie par:
.Une autre option est d'utiliser wmz la suggestion de format CSV, si j'ai toujours supprimer la fin
<CR>
.EDIT - Pourquoi le wmz solution peut sembler fonctionner, sans décapage
<CR>
La
<CR>
problème peut ne pas être apparente, selon la façon dont vous accédez à lamodel
variable après qu'elle a été définie. Normale de l'extension de la bande tout<CR>
, mais a retardé l'expansion de la préserve.--- SORTIE ---
MODIFIER - une autre façon d'éviter la
<CR>
problèmeVous pouvez utiliser le format CSV et demande un attribut supplémentaire qui apparaît après la valeur que vous souhaitez. Le
<CR>
seront rejetées avec la valeur supplémentaire lorsque vous analysez le désiré jeton.OriginalL'auteur dbenham
En dehors de parage de la chaîne de retour (comme l'a déjà suggéré), vous pouvez aussi reformater wmic de sortie de sorte qu'il ne retourne pas de padding (espaces), par exemple:
for /f "skip=2 tokens=2 delims=," %%a in ('wmic csproduct get name /format:csv')
C'est particulièrement pratique si vous voulez revenir plus que 1 colonne.
(il sera de retour de données tel qu'il est, donc, si elle comprenait l'espace final, il sera retenu. Si vous souhaitez couper des espaces sans condition, utilisez une variable de substitution)
<CR>
.Vous avez raison au sujet de l'ignorer, mon mauvais. J'ai copié à partir de l'OP et j'ai oublié de mettre à jour. Corrigé, merci! Comme pour
CR
, sur mon (xp), ordinateur portable, ce problème s'affiche pour la première (ligne d'en-tête, 'nom', suivie parCR
), mais pas la valeur de la ligne. Peut-être un OS différence.Je pense qu'il est là, mais vous juste ne peut pas le voir, selon la façon dont vous accédez à la variable. Voir ma réponse
OriginalL'auteur wmz
Comme Kayasax suggéré, vous pouvez utiliser la substitution de variable.
Mais cela ne fonctionne qu'avec normal variables, pas avec %1 ni pour les paramètres de boucle.
Ou si vous êtes sûr que wmic toujours ajouter un espace, vous pouvez utiliser également
Cela supprime le dernier caractère
<CR>
question.OriginalL'auteur jeb