CMD imbriqués les guillemets doubles argument
Je vais avoir des problèmes avec le passage d'arguments à un lot en fonction imbriquée avec des guillemets.
Voici un exemple de fichier de commandes:
@SET path_with_space="c:\test\filenamewith space.txt"
@CALL :FUNCTION blaat1, "blaat2 %path_with_space%"
@GOTO :EOF
:FUNCTION
@echo off
echo arg 1: %~1
echo arg 2: %~2
echo arg 3: %~3
GOTO :EOF
La sortie est:
arg 1: blaat1
arg 2: blaat2 "c:\test\filenamewith
arg 3: space.txt""
Que dois-je faire pour faire arg 2: blaat2 "c:\test\filenamewith space.txt"
?
Notez que je ne peut pas régler la fonction ou de modifier le %path_with_space%
. Je ne peut contrôler que ce qui est passé à la fonction.
OriginalL'auteur Davor Josipovic | 2012-09-23
Vous devez vous connecter pour publier un commentaire.
Comme dbenham dit, il semble impossible d'échapper à un espace dans un paramètre sans les guillemets.
Mais il pourrait être possible si vous savez comment l' récepteur fonction récupère les paramètres.
Ensuite, vous pouvez transférer le paramètre via une échappé à retard variable, la variable sera élargi pas dans l'appel, il sera élargi juste dans la fonction.
Et il est nécessaire que les paramètres seront affectés à la fonction de variables, mais cela pourrait être le cas dans un bon et un code lisible.
La sortie est:
EDIT: Soltution avec par injection de commandes
Cela fonctionne même en cas de retard de l'expansion devrait être toujours désactivé.
Mais alors vous devez maintenant la façon dont les paramètres sont développés dans la fonction.
%
, mais oublié!
. Il fait sens aujourd'hui. Merci!+1 - j'ai pensé à cette solution, mais j'ai pensé qu'il n'était pas acceptable car elle exige l'expansion retardée à être activé, un changement potentiel pour la fonction.
J'ai également pensé au problème de l'expansion retardée, mais vous pouvez également résoudre ce problème avec par injection de commandes
Wow. Je ne comprends pas que par injection de commandes, mais je suis en train de jouer un peu avec elle. C'est très étrange.
à mon tour - WOW. Il m'a fallu un certain temps à comprendre comment votre lot des travaux d'injection. La dernière citation n'est pas nécessaire, mais il ne le cite équilibrée. Très intéressant de voir comment le côlon extrémités de l'étiquette dans l'APPEL, et tout ce qui suit est un commentaire jusqu'à tous les séparateurs de jetons. C'est nouveau pour moi.
OriginalL'auteur jeb
J'ai trouvé cela, mais tout ce que je pouvais faire était de déplacer le problème dans les différentes zones.
Travailler avec des Citations
arg 1: blaat1 arg 2: blaat2 c:\test\filenamewith space.txt arg 3:
bien essayé, mais les citations ont disparu 🙁OriginalL'auteur glh
Je ne crois pas que ce soit possible.
Il n'est pas possible d'échapper à un espace tel qu'il n'est pas interprétée comme un paramètre delimiter. La seule manière d'inclure un espace dans un paramètre est à mettre entre guillemets. Vous avez besoin d'un peu d'espace pour être cités et d'autres non, donc c'est impossible.
%
, mais sans succès.OriginalL'auteur dbenham
@jeb +1
@davor
pourquoi ne pas l'utiliser il suffit de double-guillemets
La sortie est:
OriginalL'auteur walid2mi
Je vous suggère de retirer les guillemets avant de passer les arguments à FONCTION (Note
%path_with_space:"=%"
vs%path_with_space%"
dans votre exemple), alors vous pouvez les mettre en arrière avec le remplacement de votre chemin avec la cité verion (%%_arg_2:%path_with_space:"=%=%path_with_space%%%
):De sortie est:
Si d'autres arguments aussi contenir des sentiers entourés de guillemets, vous pouvez suivre le même schéma pour tous
Ouais, je le laisse pour quelqu'un qui peut, je l'ai aussi mise à jour de ma réponse à mentionner les besoins d'édition de fonction.
OriginalL'auteur NetwOrchestration