4

次のように、COM "Windows Script Host Object Model" IWshRuntimeLibrary を使用してショートカットを読んでいます。

IWshShell wsh = new WshShellClass();
IWshShortcut sc = (IWshShortcut)wsh.CreateShortcut(shortcutFile);
string arguments = sc.Arguments;

これにより、ショートカットからの引数が得られます。たとえば、次のようになります。

-a "c:\temp\a 1.txt" -b "b.exe -c \"c:\temp\c -2.txt\" -d d.txt" -e test

これは、ご想像のとおり不自然な例ではありません...どうすれば GetCommandLineArgs と同じことを実行して取得できますか:

args {string[6]}
[0] = "-a"
[1] = "c:\\temp\\a 1.txt"
[2] = "-b"
[3] = "b.exe -c \"c:\\temp\\c -2.txt\" -d d.txt"
[4] = "-e"
[5] = "test"

私は正規表現を考えていますが、これは私のブラケットを超えています。

[編集] 正規表現の方がいいのですが、言及されているコードとクラスを見ていきます。

ルールは次のようです。

  • スペースで分割し、
  • スペースが二重引用符 (") で囲まれている場合を除きます。
  • 二重引用符で囲まれた文字列には、バックスラッシュ (\") でエスケープされた二重引用符を含めることができます。
  • 他のバックスラッシュは単独で表示される場合がありますが、通常の文字として扱う必要があります

前の 2 つのコード セクションの引数と配列は、適切なテストになります。

[編集] https://stackoverflow.com/a/749653/350188が私の質問に答えました。ネイティブ システム関数を呼び出し、GetCommandLineArgs() とまったく同じ結果が得られます。

string[] splitArguments = CommandLineToArgs(arguments);
4

3 に答える 3

1

これについては本当にトリッキーなことは何もありません。基本的な C# 構文を使用して、個々の文字を調べて、必要なものを解析できます。

たとえば、String.IndexOf()探している特定の文字を見つけることができます。String.Substring()また、文字列の一部を抽出するために使用できます。

コマンド ラインを解析するために行ったコードは、記事AC# Command-Line Parserに投稿しました。

于 2013-02-19T15:29:22.717 に答える
-3

GetCommandLineArgs が生成するような配列内の引数が必要な場合は、string.Split を使用できます。

string[] args = arguments.Split(' ');
于 2013-02-19T15:51:55.637 に答える