2011-10-21 16 views
1

エクスプローラでWindowsのコンテキストメニューから呼び出されるVB.Net Winformアプリケーションを作成する必要があり、複数のパラメータを取ることができます。最後のパラメータは、スペースを含むファイルへの完全パスです。パラメータとファイル名を渡しますか?

私は無駄に、パラメータとして次のことを試してみました:

This is a test "%1" -> this 
"This is a test "%1"" -> This is a test C:\Program 
"This is a test" "%1" -> This is a test 
"This is a test "%1%"" -> This is a test 

誰かがWindowsがファイル名に完全なパスを渡すために取得する方法を知っていますか?

ありがとうございます。

+0

あなたは 'hkcr \ filetype \ shell \ operation'の値を意味しますか? –

+0

いいえ、最後のパラメータはファイル名で、おそらくスペースが含まれています。 VB.Netアプリケーションに文字列全体を渡すソースアプリケーションを取得できません: -/ – Gulbahar

答えて

3

Windowsが完全なパスを通過しています。あなたはちょうどそれを解析することに問題があります。上記の例では

This is a test "%1" -> This is a test "C:\Program Files\Blah blah" 
-> cmdArgs(0) = "This" 
-> cmdArgs(1) = "is" 
-> cmdArgs(2) = "a" 
-> cmdArgs(3) = "test" 
-> cmdArgs(4) = "C:\Program Files\Blah blah" 

、言葉の前後に引用符がフレーズに存在しないので、「これはテストです」と、それらは別々のコマンドライン引数として渡されます。 2番目の例では

"This is a test "%1"" -> "This is a test "C:\Program Files\Blah blah"" 
-> cmdArgs(0) = "This is a test " 
-> cmdArgs(1) = "C:\Program" 
-> cmdArgs(2) = "Files\Blah" 
-> cmdArgs(3) = "blah" 

、引用は%1は引用符で囲まれていない実際のファイル名を残して、最初の引数を終了する前に、挿入マーク。

"This is a test" "%1" -> "This is a test" "C:\Program Files\Blah blah" 
-> cmdArgs(0) = "This is a test" 
-> cmdArgs(1) = "C:\Program Files\Blah blah" 

3つ目の例では、2つの引数が別々に引用されるため、2つの引数としてプログラムに渡されます。これはあなたが使用すべきものです。あなたの問題は、cmdArgs(0)しか見ておらず、残りの部分はcmdArgsで無視しているということです。特に、ファイル名のあるcmdArgs(1)をチェックアウトするのを忘れてしまった。

+0

ありがとうレイモンド。私はすべてのパラメータが1つの文字列として送信されたと思った。 My.Application.CommandLineArgsをループすると、それらのすべてを取得できます。 – Gulbahar

関連する問題