Est-il possible de passer des paramètres “par son nom” (et non pas par ordre) pour un lot .fichier bat?
J'ai besoin d'être en mesure de passer des paramètres à un fichier de commandes windows PAR NOM (et non PAS par ordre). Mon but ici est de donner à l'utilisateur final la flexibilité de passer des paramètres dans n'importe quel ordre, et le fichier de lot doit toujours être en mesure de les traiter.
Un exemple pour faire à ma question plus clairement:
dans la ligne de commande, l'utilisateur effectue les opérations suivantes:
somebatchfile.bat originalFile.txt newFile.txt
À l'intérieur de somebatchfile.bat
il est une simple déclaration de copier le contenu du fichier d'origine (premier paramètre %1%) pour le nouveau fichier (deuxième paramètre %2%). Il pourrait être aussi simple que la déclaration suivante:
copy %1% %2%
Maintenant, si l'utilisateur passe les paramètres ci-dessus dans l'ordre inverse, le résultat sera loin d'être souhaitable (très MAL en fait).
Donc, il est un moyen pour l'utilisateur de passer des paramètres par nom: par exemple, somebatchfile.bat "SOURC=originalFile.txt" "TARGET=newFile.txt"
et pour le script de les reconnaître et utiliser les em dans les endroits corrects par exemple copy %SOURCE% %TARGET%
?
Merci,
- Cette question ressemble à ceci : Spécifier des arguments de ligne de commande comme les paires nom=valeur de shell-script Espérons que cette aide.
- mais l'OP question au sujet du lot (windows/dos), c'est assez différent de bash.
- Pas depuis la disparition de l'Algol-60.
Vous devez vous connecter pour publier un commentaire.
Oui, vous pourriez faire quelque chose comme ça mais je ne pense pas que vous pouvez utiliser "=" comme un jeton de délimiteur. Vous pouvez utiliser dire un deux-points ":",
somebatchfile.bat "SOURC:originalFile.txt" "TARGET:newFile.txt"
. Voici un exemple de comment vous pouvez diviser les jetons:L'exécution de ce serait de produire ce:
[Modifier]
Ok, c'était peut-être trop près de l'heure du coucher pour moi la nuit dernière, mais en regardant à nouveau ce matin, vous pouvez le faire:
Qui permettrait de produire à ceci (notez que j'ai inversé la source et la cible sur la ligne de commande pour montrer qu'ils sont ensemble et récupéré correctement):
Noter que %1 et %2 sont évalués avant la
set
si elles ne se fixer comme des variables d'environnement. Ils doit toutefois être indiqué sur la ligne de commande.name & value
avec une seule ligne de code. Comment cela peut-il être tout à fait un peu de traitement? Mais alors, je vois que vous parlez d'avoir une fonctionnalité intégrée – eh bien, non, lot de script est un outil assez limité, qui Microsoft a (une fois de plus) indirectement par l'introduction de PowerShell.Un peu en retard à la fête 🙂 C'est ma suggestion pour la gestion des "posix comme" des options.
Par exemple
mybatchscript.bat -foo=foovalue -bar=barvalue -flag
..et ici les fonctions qui font le travail. Vous devez les mettre dans le même fichier de commandes
Enregistrer le fichier en tant que
mybatchscript.bat
et exécuterVous obtiendrez:
Autre façon j'ai bien aimé:
Exécutez la commande suivante:
Génère la sortie suivante:
Je voulais voir la possibilité de la lecture paramètre nommé fournies à un programme de commandes. Par exemple :
Lecture paramètre peut être fait comme suit :
Ci-dessus argument fourni par lots le programme est facile à lire, mais à chaque fois que vous exécuter, vous devez maintenir l'ordre et rappelez-vous ce que arg1 est censé avoir. Pour la surmonter, le paramètre peut être fourni en tant que clé:format de valeur. Et commande devrait ressembler à ci-dessous :
Si il n'est pas simple à analyser une telle liste d'arguments. J'ai écrit imbriqués suivants pour la boucle dans script batch qui va analyser et créer la variable d'environnement avec key1 que le nom, et la valeur 1 est attribuée. De cette façon, vous pouvez lire tous les arguments fournis à l'aide de simple de la lecture de la variable d'environnement.
Par la suite, vous pouvez utiliser
%key1%
format pour lire tous les arguments qui ont été fournies.HTH
setLocal
n'a pas fonctionné pour moi, maisset
fait.echo INSTALL_PATH: %INSTALL_PATH% >> text.txt
.Très vieille question, mais je crois que j'ai trouvé un moyen sympa (sans dépendances externes) de passer
key=value
arguments pour un fichier de commandes. Vous pouvez tester la méthode avec le suivant MWE:La méthode est assez:
key=value
arguments peuvent être mélangés avec d'autres arguments (comme les noms de fichiers), et parce que le nom de la variable utilisée pour stocker la valeur est indépendante du nom de la clénull
ouundefined
au lieu de vide)Profiter.
Je pense que vous êtes à la recherche pour getopt type de prise en charge dans Windows scripts batch qui, malheureusement, n'existe pas dans la totalité. Le plus proche que vous pouvez probablement obtenir de l'est à l'aide de GetOpt.btm script. Avec cela, alors vous pouvez exécuter votre script à l'aide de la commande:
Code:
Ce code vérifie tous les paramètres, toutes les bandes extérieures des citations, et si le signe égal est présente, définit la variable de valeur.
basé sur cette réponse: L'utilisation de paramètres dans des fichiers batch DOS en ligne de commande