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.
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
Vous devez vous connecter pour publier un commentaire.
J'reconstruire le fichier et il a travaillé
Mais je vous recommande d'utiliser expansion retardée, comme vous pouvez vous eu des problèmes avec le pour cent de l'expansion de caractères spéciaux( Dans ce cas pas très pertinentes, comme des caractères spéciaux sont un mauvais choix pour les noms de fichiers).
Bonne question, au bout de 5 ans je ne me souviens pas ce que je voulais écrire, donc je suppose que
OriginalL'auteur jeb