Comment retourner une valeur d’une fonction dans un fichier de commandes?

J’ai le fichier de commandes suivant

@echo off setlocal EnableDelayedExpansion for /f "delims==" %%J in (File_List.txt) do ( call :setDate %%J MYD echo/Date is: %MYD% ) endlocal &goto :eof :setDate SETLOCAL ENABLEEXTENSIONS echo %1 echo %~2 set NAME=%1 set NAME=%NAME:~-11% echo %NAME% echo %~2 endlocal&set %2=%NAME%&goto :eof 

mais avec File_List.txt contenant le fichier2012-05.csv

Je reçois

 file2012-05.csv MYD 2012-05.csv MYD Date is: 

Comment puis-je obtenir la fonction setDate pour renvoyer la valeur souhaitée?

L’interpréteur de lots évalue %MYD% à l’heure d’parsing et à ce moment-là, il est vide. C’est pourquoi vous avez retardé votre expansion . Changer cette ligne:

 echo/Date is: %MYD% 

pour ça:

 echo/Date is: !MYD! 

et cela fonctionnera comme vous le souhaitez, car alors il demande à l’interprète d’évaluer MYD au moment de l’exécution.

Comme je ne comprends pas de votre script ce que vous voulez réaliser, je réponds (pour être complet) au sujet d’origine: retourner une valeur à partir d’une fonction.

Voici comment je le fais:

 @echo off set myvar= echo %myvar% call :myfunction myvar echo %myvar% goto :eof :myfunction set %1=filled goto :eof 

Le résultat est:

 empty filled