Je me trouve fréquemment en utilisant Cependant, je suis une perte sur la façon de faire cela si je veux réellement que l'une de ces variables soit disponible. p> Considérez le code suivant qui vous donne le composant final du courant répertoire (donc quand je cours ça, je Obtenez la sortie: p> et vous pouvez voir que le dossier Je sais que je peux simplement utiliser existe une manière dans Misté, ne me dites pas qu'il y a une meilleure façon d'obtenir la composante de chemin finale. C'est un exemple d'exemple uniquement. P> En réalité, vous peux em> me dire un meilleur moyen car ce serait bien de savoir, mais cela ne répondra pas à ma question spécifique: - ) p> p> setlocal code> dans
cmd.exe code> pour éviter de polluer l'espace variable d'environnement avec des variables temporaires (et pour vous assurer que les extensions de commande et l'expansion retardée sont actives) .
c: \ pax \ dir1 code> vous donnerait
dir1 code>): p>
%% code> variable ne survit pas au
endlocal code>. Toutefois, si je laissez désactiver le
setlocal / endlocal code> de la fonction, le
TEMP code> flowable pollue l'espace de noms de
principal p> p>
définir temp = code> à la fin de
FUNC code> et cela supprimera la variable d'environnement mais qui ne couvre pas le cas où je suis déjà utilisé. cette variable dans la portée extérieure (elle est totalement détruite dans ce cas). P>
cmd.exe code> pour permettre à un groupe de variables d'environnement sélectionnant à la périmètre extérieur tout en empêchant toujours les autres de l'affecter? En d'autres termes, pouvez-vous avoir à la fois des variables locales et des variables de retour? P>
3 Réponses :
"La solution est de tirer profit du fait que le shell CMD évalue les variables sur une base ligne par ligne - plaçant ainsi ENDLOCAL sur la même ligne que l'instruction SET (s) donne le résultat que nous voulons: "source: ss64.com
Ainsi, le changement de endlocal func: à ce sujet. .. p>
endlocal & set folder=%folder%
Avec peut-être un peu plus entre parenthèses jeté dedans?
@Ben Pas à ma connaissance. Le ampersand, tel qu'utilisé, est un séparateur de commande pas un opérateur. Non pas que l'aide entre parenthèses blesserait, donc si vous préféreriez ne hésitez pas.
Brillant. Fonctionne parfaitement, y compris plusieurs && ensemble code> commandes pour permettre à plus d'une variable d'échapper.
Désolé, je voulais dire entre guillemets, pas entre parenthèses.
Pour une meilleure lecture et mise en forme, vous pouvez utiliser des parenthèses.
call :func resultVar echo(%resultVar% goto :eof :func setlocal set var=2 ( endlocal if "%1" NEQ "" set "%1=%var%" goto :eof )
Merci à celui qui a expliqué à propos de endlocal && ensemble aaa aaa =% &&% set = bbb bbb%% code>
permanantly ensembles
aaa code> et
bbb code> en dehors du
setlocal code> et conserve ce paramètre dans l'invite de commande pour un autre fichier batch à utiliser (pour exmaple, si le fichier batch contenant le
setlocal code> a été appelé à partir d'un autre fichier batch le fichier batch appelant aura maintenant les nouveaux paramètres
aaa code> et
bbb code> p>
endlocal && ensemble code>. Je suis passé par trente-six sites Web pour obtenir une résolution à cette situation simple. P>