run文とrunsync2文のパラメータ文字列につNo.35319
tamu さん 16/09/29 14:06
 
引数を表示するWSHのVBScript(ArgMsg.vbs)を、マクロ(bbb.mac)からrun文とrunsync
2文で実行すると結果が異なります。

具体的には、run文の場合は、「%B」の部分がマクロファイル名(bbb.mac)に置き換わ
った文字列が渡されているような結果となり、
runsync2文の場合は、マクロ中の $s の文字列をWindowsの「ファイル名を指定して
実行」で実行した場合と同じ結果となります。

ちなみに、"%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB" は、文字
列 "インストール" を encodeURI でエンコードしたものです。


Windows 10 Pro Ver 1607 (64bit)
秀丸エディタ Ver 8.64 (64bit)


bbb.mac
--------------------------- ここから ---
$s = "wscript.exe ArgMsg.vbs %E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E
3%83%AB";
run $s;
runsync2 $s;
--------------------------- ここまで ---

ArgMsg.vbs
--------------------------- ここから ---
WScript.Echo WScript.Arguments.Item(0)
--------------------------- ここまで ---

[ ]
RE:35319 run文とrunsync2文のパラメータNo.35320
秀丸担当 さん 16/09/29 15:09
 

試してみたところ確かにそうなることが確認できました。
run文の %b や %f や %dなどは、「プログラム実行...」コマンド同様に、ファ
イル名などに置き換えられるようになっていて、そうなっていました。
%を書く場合は、%%にすると回避することができます。
一方、runsync2文は置き換えられることは無いです。

run文の場合は少々面倒ですが、例えば以下のようにして置き換えて%%にすると
できると思います。
#c = strlen( $s );
#i = 0;
while( #i < #c ) {
    if(midstr($s,#i,1)=="%"){
        $s=leftstr($s,#i)+"%"+rightstr($s,#c-#i);
        #i = #i + 1;
        #c = #c + 1;
    }
    #i = #i + 1;
}

[ ]
RE:35320 run文とrunsync2文のパラメータNo.35322
tamu さん 16/09/30 06:17
 
お手数かけ申し訳ありません。

再度ヘルプを見直して内容が記載されていることを確認しました。

提示いただいたスクリプトの動作結果も期待通りです。

[ ]