Bonjour, j'ai une question concernant les fonctions d'un fichier batch. J'ai la configuration suivante:

echo off
set dSource=%1
set dTarget=%2
set fType=%3
for /f "delims=" %%f in ('dir /a-d /b /s %dSource%\%fType%') do (
    copy /V "%%f" %dTarget%\tempsrc 2>nul
)

Je peux appeler ce fichier de commandes avec les paramètres suivants:

test.bat "C:\Batch" "C:\Output" "text.xml"

Y a-t-il une possibilité que je puisse avoir, comme dans Javascript ou tout autre langage de programmation, une fonction qui prend le paramètre comme entrée pour que je puisse faire un appel comme celui-ci:

functionName(dSource,dTarget,fType1)
functionName(dSource,dTarget,fType2)
etc..

Sinon, je dois le faire comme ceci:

for /f "delims=" %%f in ('dir /a-d /b /s %dSource%\%fType1%') do (
    copy /V "%%f" %dTarget%\tempsrc 2>nul
)
for /f "delims=" %%f in ('dir /a-d /b /s %dSource%\%fType2%') do (
    copy /V "%%f" %dTarget%\tempsrc 2>nul
)

Ce qui est très insuffisant

1
Rotan075 5 avril 2017 à 16:56

2 réponses

Meilleure réponse

Vous pouvez le faire avec étiquette que vous pouvez appeler avec call ::label:

call ::funct param_1 param_2

exit /b %errorlevel%

:funct [dsource ftype]
echo off
set dSource=%1
set dTarget=%2
set fType=%3
for /f "delims=" %%f in ('dir /a-d /b /s %dSource%\%fType%') do (
    copy /V "%%f" %dTarget%\tempsrc 2>nul
)

Et vous devez définir exit /b avant de démarrer les définitions de fonctions afin de les empêcher de s'exécuter deux fois.

2
npocmaka 5 avril 2017 à 14:07

Les fichiers batch n'ont pas de vraies fonctions (dans le sens de renvoyer une valeur); ils ont cependant l'équivalent de procédures ou de sous-programmes, qui peuvent prendre des paramètres. Les sous-programmes / procédures sont appelés par la commande CALL. Si vous n'avez pas besoin de renvoyer des informations à l'appelant à partir de l'appelé, la routine CALL peut être stockée dans un fichier .BAT ou .CMD séparé; si vous avez besoin de renvoyer des informations (un "hack de fonction"), le sous-programme doit être un bloc étiqueté dans le fichier de l'appelant. Pour ce dernier, voir le didacticiel de la fonction DOSTips Batch.

(Pour ce que cela vaut, je suis d'accord avec la recommandation de Bill_Stewart d'utiliser PowerShell de préférence au traitement par lots.)

2
Jeff Zeitlin 5 avril 2017 à 14:08