VBScriptとJScriptって何が違ってWSHとはどう違うのか
VBScriptとJScriptって何が違ってWSHとはどう違うのか
先に答えを書いてしまうとVBScriptは『Basic寄り』でJScriptは『C寄り』なのだそうです。
JScript は JavaScript ではないが JavaScript を読み込めるから拡張子が.jsでも動作します。
WSHはVBScript とJScriptの間に横たわる橋みたいなもんと考えてればいいみたい。ちなみにWSHは言語ではくてプラットフォームなので 拡張子 wsf で行けば VBScriptとJScript の混在が可能だとか…。それ実際組んだらカオスですけどね。
ちなみに、利用できる拡張子はこんな感じ。
WSH:「.js」「.jse」「.wsf」「.vbs」
VBS:「.vbs」「.wsf」
JScript:「.js」「.jse」「.wsf」
Google先生の導く回答も混乱してらっしゃるという難解ぶり。
JScriptで調べるとJavaScriptを検索HITするし、記事にしてまとめてる方も混同したりしてますもんね。
JScript≠JavaScriptですから!違いは こちら や こちら を参照すると解りやすいです。
という事でちょっと整理整頓してみます。
JScriptとVBScriptで大きく違う点は変数設置の方法
下の参考コード OpenCmd.jse と OpenCmd.vbs は『コマンドプロントを開いて 123456789 と記載してEnterを押し、5秒後に閉じる』という同じ処理をします。
■OpenCmd.jse ※JScript
1 2 3 4 5 6 7 8 9 10 11 |
var Shell = WScript.CreateObject ("WScript.Shell") //コマンドプロント起動 Shell.Run ("\"%windir%\\system32\\cmd.exe") //5秒休み WScript.Sleep( 1000 ) Shell.SendKeys("123456789") Shell.SendKeys( "{ENTER 1}" ) WScript.Sleep( 5000 ) Shell.SendKeys( "%{F4}" ) WScript.Sleep( 100 ) |
■OpenCmd.vbs ※VBS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Option Explicit Dim Shell Set Shell = WScript.CreateObject ("WScript.Shell") 'コマンドプロント起動 Shell.Run ("%windir%\\system32\\cmd.exe") '5秒休み WScript.Sleep( 1000 ) Shell.SendKeys("123456789") Shell.SendKeys( "{ENTER 1}" ) WScript.Sleep( 5000 ) Shell.SendKeys( "%{F4}" ) WScript.Sleep( 100 ) |
見ての通り、後半の書き方なんて全く同じ。
違うのはRUNで走らせている『Pathの記載方法』と『Dimでの変数宣言(VBS)』くらいです。
その他の細かい違いについて
それぞれの動作をまとめた資料があったのでパクって置いておきます。
VBScript | JScript | |
条件コンパイル | なし | @cc_on @if @set |
OOP | クラス(Class)構文による型定義 | prototypeによるオブジェクト定義 |
定数宣言 | Const | なし |
GUI | MsgBox関数,InputBox関数<による詳細な制御 | なし |
オブジェクトの代入 | Set ステートメント | 通常の値の場合と同じ |
組み込みオブジェクト | Err RegExp |
JavaScriptのオブジェクト Enumerator RegExp VBArray ActiveXObject GetObject |
変数宣言の強制 | 可 | 不可 |
参照渡し | ByRef,ByVal | 言語既定 |
オブジェクトへのアクセス制御 | Private | なし |
エラー制御(例外) | On Error Resume Next,On Error Goto 0 | throw,try,catch,finally |
動的プログラミング | Execute ExecuteGlobal |
eval 関数オブジェクト |
オブジェクトの破棄 | Nothing | ガベージコレクト |
関数とプロシージャ | Sub,Functionによる定義の区別、呼び出し方法(Call)による区別 | 区別なし |
細かいところ | インクリメンタル演算子がない 比較と代入が文脈で判断される ※例えば、If A = 123 は比較、SET A = 123 なら代入 |
|
可変長配列 | Redimステートメント | Arrayオブジェクト |
VBSには インクリメンタル演算子が無いのでループ内に『 i++ 』で変数加算していく事は出来ないようです。
『オブジェクトの宣言』と『破棄』はVBSでコード記載する時の鍵であったりします。
今回、大ハマリしたアクティブウィンドも最終的にはこの宣言と破棄と破棄されるタイミングのコントロールが原因でした。(ここら辺のお話は後程)
まとめ
プログラミングでいろんな言語に触っていくと、書き方のクセとか微妙な違いに振れる事になります。
そして今回の様に「どこが違うんじゃい!」というのにも…。
そもそもね、わかりずらい奴多いですよね。
- Java ≠ JavaScript ≠ JScript
- JQuery ≠ AJAX
- VBE ≒ VBA ≠ VBS
理解出来てくると「なるほど」だけど取っ掛かりの資料が混雑してらっしゃるから解くのに時間かかります。
今回のWSHもそんな感じ。だって検索するとVBSもJScriptもHITして、つまみ食いすると(それぞれ書き方違うから)動かないんですもん。
大切なことは『WSHはプラットフォームであって言語ではない』って事です。
-
前の記事
AccessVBAとExcelマクロとVBScriptの(ブラウザ操作上の)注意すべき相違点 2020.09.03
-
次の記事
VBSで簡単にCSVを読み込む方法(CSVを小さいDBとして利用する方法) 2020.09.04
コメントを残す