Comment passer des arguments (pas les arguments de ligne de commande) à des fonctions dans les scripts

Je suis en train d'écrire un fichier batch pour automatiser la création d'typique des structures de dossier pour les produits que nous vendons. Je voudrais être en mesure d'appeler mon fichier batch avec 2 arguments facultatifs; le nom du fournisseur et d'un fichier pour la création d'un grand nombre de dossiers à la fois. Si aucun fournisseur n'est fourni le script demande via l'entrée standard qui est le fournisseur. Si aucun fichier n'est fourni, le script demande le nom du dossier que vous souhaitez créer. Si un fichier est passé comme argument, je voudrais que le script pour lire le fichier ligne par ligne et de créer un dossier pour chaque ligne, nommé d'après le contenu de cette ligne. Voici la :readFile fonction:

:readFile
    echo "Reading from file: %theFile%"
    FOR /F "delims=," %%a IN (%theFile%) do (
        call:makeFolder %%a
    )
    goto:EOF

Ici est la :makeFolder fonction qui peut éventuellement prendre l'argument le nom du dossier à créer. Si aucun argument n'est fourni, il vous demande le nom via l'entrée standard.

:makeFolder  
    if [%1]==[] (
        set /p product="Enter product name: "
    ) else (
        set product=%1
    )
    if exist "P:\%supplier%\Products\%product%" (
        echo.
        echo The folder '%product%' already exists.
        echo.
        goto:EOF
    )
    mkdir "P:\%supplier%\Products\%product%\Images\Web Ready"
    mkdir "P:\%supplier%\Products\%product%\Images\Supplied"
    mkdir "P:\%supplier%\Products\%product%\Images\Edited"
    goto:EOF

Mon problème est que dans le :makeFolder fonction %1 se réfère à la 1ère argument donné sur la ligne de commande, et non celui fourni dans le :readFile fonction. Comment puis-je y parvenir? Mise en garde: je suis très nouveau lot de script de sorte que vous pouvez avoir à parler de moi comme je suis un peu stupide.

%1 est le premier argument, si vous avez obtenu le premier paramètre de la ligne de commande, il pourrait être possible qu'une " exit /b day est manquant après votre code principal
Cela devrait être une réponse, à mon avis. Je me rends compte que c'est une supposition, mais c'est probablement le deviner. Et même si elle s'avère fausse dans le cas des OP cas, il devrait encore être là en tant que possible réponse, pour les autres (ceux qui pourraient venir à travers cette question).
Je suis désolé, je ne comprends pas, qu'est-ce que exit /b'day? Je comprends que $1 est le premier paramètre de la ligne de commande, mais ce que je comprends, vous aussi utiliser $1 lorsque vous référencez le premier argument d'une fonction. Ma question est que puis-je faire pour accéder au premier argument passé à :makeFolder sans faire référence à la 1ère argument de ligne de commande?
%1 est le premier paramètre sur la ligne de commande uniquement dans la partie principale du fichier de commandes. L'intérieur d'une fonction, %1 signifie que le premier paramètre de cette fonction. À l'intérieur d'une fonction, vous n'avez pas d'accès direct aux paramètres de la ligne de commande.
Je pense que vous êtes mal avec la description du problème. Je vous suggère d'insérer une echo Parameter for makeFolder: %%a avant l'appel à elle, et un echo Parameter received %1 dans la première ligne de makeFolder. Cela peut vous aider à voir ce qui se passe.

OriginalL'auteur MrMisterMan | 2011-10-24