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