lnkファイル(ショートカットファイル)について質問です。


lnkファイルに別のファイルをドラッグ&ドロップしたとき、ドロップしたファイルがコマンドライン引数の最後尾以外になるようにする方法を教えてください。

例えば、"C\:app.lnk" に "C\:file.txt" をドロップした時に
"C:\app.exe C\:file.txt -Option=Yes" というコマンドが実行されるようにするには、ショートカットにリンク先にどのような文字列を書けばよいのでしょうか?

回答の条件
  • 1人3回まで
  • 登録:2007/09/03 06:27:13
  • 終了:2007/09/08 09:24:02

ベストアンサー

id:Mook No.2

Mook回答回数1312ベストアンサー獲得回数3912007/09/03 11:26:52

ポイント125pt

直接リンクを編集する方法ではありませんが、VBS を介する方法でどうでしょうか。

赤字の部分を実際の内容に修正してから、適当なファイル名(test.vbs 等)で保存し、

Option Explicit

Const CommandPath = "C:\app.exe"
Const CommandOpt  = "-Option=Yes"

Const SHELL_HIDE = 0
Const SHELL_DISPLAY = 1

'------ 引数がない場合は終了
If WScript.Arguments.Count = 0 Then
    MsgBox "実行するファイルを指定してください"
    WScript.Quit
End If

Dim arg
With CreateObject( "WScript.Shell" )
'------ 引数を一つずつ処理
    For Each arg In WScript.Arguments
'------ メッセージが不要な場合は、次の行を削除
        WScript.Echo arg & "の処理を開始します"
'------ メッセージが不要な場合は、画面を隠したいときは SHELL_DISPLAY を SHELL_HIDE に変更
        .Run CommandPath  & " "" & arg & """ " & CommandOpt, SHELL_DISPLAY, True
    Next
End With

ここにドロップすれば期待される形で実行されると思います。


この利点として、複数のファイルをドロップしても一つずつ処理できます。

また、オプション(SHELL_DISPLAY/SHELL_HIDE の部分)の指定で画面に処理を表示せずに実行することもできます。

id:koori

ご回答ありがとうございます。

ですが・・・すみません、せっかくVBSを書いて頂いたのに申し訳ないのですが、今回の質問の最終的な目的はコマンドを実行することではなく、ショートカットと独自のショートカットもどきファイルとの相互変換をする事だったんです。

ですので、書いていただいたスクリプトは、また別の機会に活かさせて頂きたいと思います。

2007/09/03 12:31:35

その他の回答(1件)

id:taknt No.1

きゃづみぃ回答回数13539ベストアンサー獲得回数11982007/09/03 06:55:28

ポイント25pt

%1 が ファイル名です。

"C:\app.exe " %1 " -Option=Yes"

とすればいいでしょう。

id:koori

ご回答ありがとうございます。

早速 %1 で試してみたのですが・・・動きませんでした。

引数を調べるソフトを使ってみると、%1がそのまま渡され、その後にドロップしたファイル名が続いているようでした。

上の例とは違いますが、ペイントへのリンク("%SystemRoot%\system32\mspaint.exe " %1)で試してみても、ファイルをドロップすると 「C:\WINDOWS\system32\%1.bmp が見つかりませんでした。」と表示されてしまいます。

環境によって仕様が異なるとは思っていなかったので、環境を書いていなかったのですが、こちらの環境は Windows XP SP2(.NET 1.0、1.1、2.0、3.0、3.5βインストール済)です。

もし、OSによってショートカットの仕様が異なる場合は、各OSでの仕様も教えていただけると助かります。

2007/09/03 09:39:56
id:Mook No.2

Mook回答回数1312ベストアンサー獲得回数3912007/09/03 11:26:52ここでベストアンサー

ポイント125pt

直接リンクを編集する方法ではありませんが、VBS を介する方法でどうでしょうか。

赤字の部分を実際の内容に修正してから、適当なファイル名(test.vbs 等)で保存し、

Option Explicit

Const CommandPath = "C:\app.exe"
Const CommandOpt  = "-Option=Yes"

Const SHELL_HIDE = 0
Const SHELL_DISPLAY = 1

'------ 引数がない場合は終了
If WScript.Arguments.Count = 0 Then
    MsgBox "実行するファイルを指定してください"
    WScript.Quit
End If

Dim arg
With CreateObject( "WScript.Shell" )
'------ 引数を一つずつ処理
    For Each arg In WScript.Arguments
'------ メッセージが不要な場合は、次の行を削除
        WScript.Echo arg & "の処理を開始します"
'------ メッセージが不要な場合は、画面を隠したいときは SHELL_DISPLAY を SHELL_HIDE に変更
        .Run CommandPath  & " "" & arg & """ " & CommandOpt, SHELL_DISPLAY, True
    Next
End With

ここにドロップすれば期待される形で実行されると思います。


この利点として、複数のファイルをドロップしても一つずつ処理できます。

また、オプション(SHELL_DISPLAY/SHELL_HIDE の部分)の指定で画面に処理を表示せずに実行することもできます。

id:koori

ご回答ありがとうございます。

ですが・・・すみません、せっかくVBSを書いて頂いたのに申し訳ないのですが、今回の質問の最終的な目的はコマンドを実行することではなく、ショートカットと独自のショートカットもどきファイルとの相互変換をする事だったんです。

ですので、書いていただいたスクリプトは、また別の機会に活かさせて頂きたいと思います。

2007/09/03 12:31:35
  • id:Mook
    >ショートカットと独自のショートカットもどきファイルとの相互変換をする事
    をもう少しご説明いただけますか?

    http://www.ceres.dti.ne.jp/~sugiura/hidemaru/qa/4_cmdlin.html
    にあるように、ショートカットではオプションを指定することが難しいようで、今回のように VBS や BAT(あるいは他のプログラム) を介して引数を調整してあげる必要がありそうです。

    内容がもう少しわかると、代替案も考えられると思うのですが。
  • id:koori
    コメントありがとうございます。

    >>ショートカットと独自のショートカットもどきファイルとの相互変換をする事
    >をもう少しご説明いただけますか?

    自作のコマンド型ランチャ(http://frozenlib.net/o2handler/)用のデータとショートカットを相互変換することで、このソフトからショートカットを引数付きで実行したり、ショートカットを作成できるようにしたいと思い、質問させて頂きました。

    ただ、元々、独自データはショートカットと記録可能な内容が大きく異なっているので、可能な範囲での相互変換を考えており、具体的に「○○という機能が必要」という基準は無いんです。

    ですので、"オプションを指定することが難しい" という情報はとても参考になりました。
    どうもありがとうございました。
  • id:Mook
    回答いただいた内容から、いろいろ考えてみましたがなかなかいいアイデアが浮かびません。

    目的をまだはっきり理解できていないということもありますが、ショートカットに引数を持たせることはできるが、そこにドロップするとその引数が無効になってしまうということが、現在の問題だと思います。

    先に紹介したのは Windows 95 の記事でしたがこれは XP でも同様の状況でした。

    ただ、今回は自作のソフトということなので、そこらへんで工夫の余地はあるようにも思えます。

    例えば、ショートカットを引数付きで実行という部分はショートカットを直接実行するのではなく、ツールに渡されたファイル名とツールで見ているショートカットのコマンド部分(引数を含む)部分から、実際の実行文字列を生成し、コマンド内で実行するようにすれば、回避できないでしょうか。

    コマンドの機能の詳細がわからないので、的外れでしたらすみません。

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません