
私の VBA スクリプトでは、別の .vbs スクリプトを作成し、そのスクリプトに 1 行のコードを書き込むコードを記述しました。
コードは次のとおりです:
Set a = fs.CreateTextFile("C:\Users\user\documents\invis.vbs", True)
a.WriteLine ("CreateObject("Wscript.Shell").Run """" & WScript.Arguments(0) & """", 0, False")
a.Close
コードはすべて正しく、完全に機能していると思いますが、修正できない構文エラーがあります。エラーは次の行にあります:a.WriteLine ("CreateObject("Wscript.Shell").Run """" & WScript.Arguments(0) & """", 0, False")
具体的には、この部分です: ("Wscript.Shell")
。構文エラーは、 を引用符で囲んでいるために発生しますWscript.shell
。
「リスト区切り記号または)を使用してください」という強調表示された構文エラーが表示されます "Wscript.Shell"
。
「 」を削除すると構文エラーはなくなりますが、スクリプトが機能するには「 」が必要です。
これを修正するにはどうすればいいでしょうか?
答え1
この回答は VBS ではなく JScript を使用しているため、気に入らないかもしれません。以前は、それらを相互に変換するツールがありましたが、それが今どこにあるかわかりません。
私たちは VBS が嫌いです。どちらも同じ WSH エンジンで実行されます。VBS は、SAFEARRAY (JS では面倒な作業) を扱うものを使用する必要がある場合に便利です。一部の COM 呼び出しには SAFEARRAY が必要ですが、JS から実行することはできますが、コードが巨大で見苦しくなります。VBS では、すべてが内部でラップされます。その一例は、WMI で呼び出す可能性のある関数の一部が、引数リストを設定するために SAFEARRAY を必要とすることです。
これを書いたところ、問題なく動作しました。
var oFso = new ActiveXObject("Scripting.FileSystemObject");
var oTextFile = oFso.CreateTextFile("C:\\Users\\user\\documents\\invis.js", true);
oTextFile.WriteLine("var oShell = new ActiveXObject(\"WScript.Shell\");");
oTextFile.WriteLine("oShell.Run( WScript.arguments(0), 0, false )" );
oTextFile.Close();
もう一度、JS については謝罪しますが、(私見ですが) 同じことを実行するクリーンな代替手段がある場合、VBS はひどい言語です。
注目すべき点の 1 つは、コードに「ワンライナー」は必要ないということです。ワンライナーを使用すると、コードが読みにくくなるだけで、何も解決しません。