ネストしたスクリプトで文字をエスケープする方法がわからない

今回は独り言です。
最近作っているVBScriptがファイルによって思った動作をしなくなります。


関連記事:ドラッグ&ドロップで使えるビデオエンコード用スクリプトを作った(ffmpeg libx264)

WScript.Shellのrunメソッドでffmpegを動かすのですが、この時プロセスの優先順位を下げたいと思いcmd.exeからstartコマンドを使いffmpegを動かしています。cmdのオプション、startのオプションとffmpegのオプションがたくさん並びます。
ffmpegへ渡すファイル名にスペースがある場合はファイルパスをダブルクォーテーションでくくらなくてはなりません。

混乱するので出来上がったコマンドをクリップボードへコピーする事にしました。VBScriptではクリップボードをいじれないのでmshta.exeからJavaScriptを動かしてコマンドをコピーさせます。この時、どの文字をどうやってエスケープしたら良いのか?ダブルクォーテーションのエスケープはどうやるのか?
何となく動くんですけど納得いく感じになりません。
エスケープしたダブルクォーテーションでくくった文字列にスペースがあるとJavaScriptの引数文字列中のスペースのはずがmshtaの引数区切りと判断されて動きません。
cmd.exe、VBScript、mshta.exe、JavaScriptそしてWScript.Shellが入り乱れています。ネストする都度 ","",""""とダブルクォーテーションが増殖します。

mshtaでいろいろな文字列の場合を実験しましたがダブルクォーテーションの使用はあきらめシングルクォーテーションを使う事にしました。すると今度はcmd.exeのstartが引数区切りを正しく認識してくれなくなります。生成したコマンドをコマンドプロンプトで直接動かせば正しく動くのですがWScript.Shellのrunメソッドへ渡すと動きません。
どうもmshtaもcmd.exeも引数区切りの動作が怪しい。

batの引数が使いものにならないのでVBScriptをいじり始めたのに、やっぱり引数の区切りで悩むことになってます。古いcmd.exeでプロセスの優先度をいじらず他の方法にするかなぁ。

コメント

最近のコメント

Threaded Recent Comments will be here.