3

長さと値が異なる少なくとも2つのコマンドラインパラメーターが追加された、このような空のスペースのフォルダー名を引用符で囲んだファイルパスがあります。

"C:\ My Program \ Sample Folder \ SubFolder2 \ MyApp1.exe" -parameter13XY1 -parameter101XZ2

引用符やコマンドライン引数を含まないファイル名のみを使用したいのですが、次のようになります。

C:\ My Program \ Sample Folder \ SubFolder2 \ MyApp1.exe

フレームワークで「 StripQuotes」や「StripCommandLineArgs 」などの関数を検索しましたが、フレームワークには必要なものがほとんどすべて欠けているため、類似したものは見つかりませんでした。引用符に関しては、「置換」を実行する可能性がありますが、コマンドライン引数をそのように分類することはできません。ファイル名にもスペースが含まれているため、ファイル名の一部が切り取られるため、Split()を使用することはできません。

最後に、引用符とコマンドライン引数を含まないファイル名のみを使用したいと思います。次のように、ファイル名に空のスペースとハイフン、およびそれらの両方の組み合わせを含めることもできることに注意してください。

"C:\ My Program --Win64 \ Sample-Folder \ Sub -Folder3 \ My App55- .exe -parameter1 -parameter2 para3"

そのような場合に有効なパスだけを見つける方法がわかりません。5つのコマンドライン引数が付加されている場合もあれば、10個の場合もあります。

4

4 に答える 4

2

次のように、正規表現"^\"([^\"]*)\".*$"を使用して、引用符で囲まれた文字列の内容を取得できます。

var s = "\"C:\\My Program\\Sample Folder\\SubFolder2\\MyApp1.exe\" -parameter13XY1 -parameter101XZ2";
var res = Regex.Replace(s, "^\"([^\"]*)\".*$", "$1");
Console.WriteLine(res);

ここに ideone へのリンクがあります。

于 2012-09-05T10:33:39.273 に答える
1

少し難しい答えは、http://commandline.codeplex.com/のようなコマンド ライン解析ライブラリを使用することです。正規表現を扱う必要なく、すべての解析を処理します。

于 2012-09-05T10:31:11.167 に答える
0

String.Splitは、文字を分割するためのパラメータを取ることができます - したがって、これを試してみると:

var array = filename.Split('"');

2 つの要素を持つ配列が返されます。

array[0] = "C:\My Program\Sample Folder\SubFolder2\MyApp1.exe"
array[1] = "-parameter13XY1 -parameter101XZ2"
于 2012-09-05T10:27:48.467 に答える
0

非常に大まかな迅速な解決策:

string cmd = "\"C:\\My Program\\Sample Folder\\SubFolder2\\MyApp1.exe\" -parameter13XY1 -parameter101XZ2";
var allStrings = cmd.Split(new char[] {'"'} );
于 2012-09-05T10:29:36.777 に答える