2010-08-12 13 views
3

Je suis désireux de passer un espace séparé variable dans un fichier batch comme:Comment puis-je transmettre une variable séparée par un espace dans un fichier bat?

c:\applications\mi_pocess.bat A1 1AA 

quand je lance echo %1 dans mi_process il retourne A1

Comment pourrais-je aller à ce sujet en reconnaissant A1 1AA être une seule chaîne ?

J'ai essayé enroulant entre guillemets doubles dans mon logiciel externe comme

c:\applications\mi_pocess.bat + chr$(34) + A1 1AA + Chr$(34) 

et echo %1 retourne maintenant "A1 1AA" (je ne veux pas les guillemets dans la variable)

Merci

+0

Vous ai remercié 2 personnes maintenant, ont-ils répondu à votre question? Si oui, acceptez la réponse. –

Répondre

0

C'est le seul moyen d'envoyer une valeur contenant des espaces au fichier batch, donc si vous ne voulez pas les guillemets, vous devez les supprimer dans le fichier batch.

3

Je suis sûr que vous êtes au courant que %1, %2, etc. à l'intérieur d'un .bat représentent les arguments numérotés passés au .bat sur la ligne de commande.

Si vous les utilisez comme %~1, %~2, etc. toutes les citations environnantes seront supprimées automatiquement, le cas échéant.

Considérez ceci space-in-args.bat pour les tests:

@echo off 
echo. %1 
echo. (original first argument echo'd) 
echo. 
echo. "%1" 
echo. (original first argument with additional surrounding quotes) 
echo. 
echo. %~1 
echo. (use %%~1 instead of %%1 to remove surrounding quotes, should there be) 
echo. 
echo. "%~1" 
echo. (we better use "%%~1" instead of "%%1" in this case: 
echo.  1. ensure, that argument is quoted when used inside the batch; 
echo.  2. avoid quote doubling should the user have already passed quotes. 
echo. 

Lancez-:

space-in-args.bat "a b c d e" 

sortie est:

"a b c d e" 
    (original first argument echo'd) 

""a b c d e"" 
    (original first argument with additional surrounding quotes) 

    a b c d e 
    (using %~1 instead of %1 removes surrounding quotes, should there be some) 

"a b c d e" 
    (we better use "%~1" instead of "%1" in this case: 
     1. ensure, that argument is quoted when used inside the batch; 
     2. avoid quote doubling should the user have already passed quotes. 

Voir aussi for /? (défiler vers le bas vers la fin) pour savoir à propos de certaines de ces conversions.

+0

Merci Pipitas - cela explique bien – Mark

1

Soit vous souhaitez utiliser %~1 dans le fichier batch:

echo %1 
echo %~1 

rendements:

> test "A1 AA1" 
"A1 AA1" 
A1 AA1 

parce %~1 supprime les citations de l'argument.

Une autre option serait %* si vous vous attendez jamais plus qu'un seul argument. %* contient tous les arguments du fichier de commandes.Cela vous permettra d'éviter d'utiliser des guillemets ici, mais cela signifie aussi que si jamais vous voulez donner un autre argument qui ne devrait pas faire partie de celui que vous êtes en train attendant, vous êtes hors de la chance:

echo %* 

on obtient alors:

> test2 A1 AA1 
A1 AA1 
+0

Merci Johannes. Mis en œuvre similaire dans mon traitement maintenant – Mark

0

vous devez utiliser% * pour obtenir tous les paramètres sauf% 0 sended dans

si vous appelez un certain fichier de commandes de cette façon call some bat 54 12 33

avec le code

set params=%* 
echo Params goted : %params% 

il retournera:

Params goted : 54 12 33 
Questions connexes