0

J'ai vu des utilisateurs écrire des classes personnalisées pour gérer plus facilement les options de ligne de commande dans différentes langues. Je me demandais si .NET (3,5 ou moins) n'a rien construit de sorte que vous n'avez pas à analyser sur mesure des choses comme:Analyse des options de ligne de commande en C#

fichier myapp.exe = text.txt

+0

Jon, je suis d'accord - ne voit pas cette question avant de poster une réponse ici. Je vais poster ma réponse là-bas (je suis surpris que personne n'ait mentionné CSharpOptParse pour le moment). –

Répondre

0

Edit: No.

Mais il y a parseurs que les gens ont construit tels que ...

On peut dire que le meilleur là-bas: C# Command Line Argument Parser

+0

Je voulais dire intégré dans le cadre, mais merci. –

0

Ceci est un post assez ancien, mais voici quelque chose que j'ai conçu et utilisé dans toutes mes applications console. C'est juste un petit fragment de code qui peut être injecté dans un seul fichier et tout fonctionnera.

http://www.ananthonline.net/blog/dotnet/parsing-command-line-arguments-with-c-linq

Edit: Il est maintenant disponible sur Nuget, et fait partie du projet open-source CodeBlocks.

Il a été conçu pour être utilisé de manière intuitive et déclarative, comme si (un autre exemple d'utilisation here):

args.Process(
    // Usage here, called when no switches are found 
    () => Console.WriteLine("Usage is switch0:value switch:value switch2"), 

    // Declare switches and handlers here 
    // handlers can access fields from the enclosing class, so they can set up 
    // any state they need. 
    new CommandLine.Switch(
     "switch0", 
     val => Console.WriteLine("switch 0 with value {0}", string.Join(" ", val))), 
    new CommandLine.Switch(
     "switch1", 
     val => Console.WriteLine("switch 1 with value {0}", string.Join(" ", val)), "s1"), 
    new CommandLine.Switch(
     "switch2", 
     val => Console.WriteLine("switch 2 with value {0}", string.Join(" ", val)))); 
4

Voici une autre approche possible. Très simple mais cela a fonctionné pour moi dans le passé.

string[] args = {"/a:b", "/c:", "/d"}; 
Dictionary<string, string> retval = args.ToDictionary(
    k => k.Split(new char[] { ':' }, 2)[0].ToLower(), 
    v => v.Split(new char[] { ':' }, 2).Count() > 1 
             ? v.Split(new char[] { ':' }, 2)[1] 
             : null); 
0

Si vous ne souhaitez pas utiliser une bibliothèque et quelque chose est assez simple bon vous pouvez le faire:

string[] args = Environment.GetCommandLineArgs().Skip(1).ToArray(); 
Func<string, string> lookupFunc = 
    option => args.Where(s => s.StartsWith(option)).Select(s => s.Substring(option.Length)).FirstOrDefault(); 

string myOption = lookupFunc("myOption="); 

;

0

Pour rapide et sale des services publics où vous n'avez pas besoin quoi que ce soit sophistiqué, plusieurs fois une application console prend des lignes de commande de la forme:

program.exe command -option1 optionparameter option2 optionparameter 

etc.

Quand c'est le cas, pour obtenir la 'commande', il suffit d'utiliser args[0]

pour obtenir une option, utilisez quelque chose comme ceci:

var outputFile = GetArgument(args, "-o"); 

GetArgument est défini comme:

string GetArgument(IEnumerable<string> args, string option) 
    => args.SkipWhile(i => i != option).Skip(1).Take(1).FirstOrDefault(); 
Questions connexes