top of page
  • 執筆者の写真伊賀上真左彦

VBSからjsファイルを生成し実行+QTTabBarの自動化

お久しぶりです。伊賀上です。本日は表記の内容にてお伝えします。

特殊なプログラムで使う機会は少ないと思いますが、それゆえにネット上の情報が少なく、作ろうとした時に苦労する方も多いと考え、記録のために残します。お役に立つことがあれば幸いです。


本記事で学べる事

  1. vbsにてjsファイルを生成、JAVAscriptを実行する

  2. QTTabBarを自動化する


サンプルプログラムの機能

  1. インプットボックスを開き、検索したいフォルダー名を入力する

  2. 指定したフォルダー(C:\test)内のサブフォルダーの名前を調べ、先ほどの文言がフォルダー目に含まれる場合、変数「foldername」にそのフォルダー名をセット

  3. QTTabBarで先ほどのフォルダーを開くプログラム、「TE.js」を生成

  4. 「TE.js」を実行

  5. 「TE.js」を削除


QTTabBarについて

エクスプローラーをタブ化する事ができる無料アプリです。多数のフォルダーを同時に開いて作業する方に便利です。


この機能はWindows11には試験的に搭載されつつありますが、タブの並べ替えやウィンドウ外にドラッグし別ウィンドウにする機能がなく、QTTabBarの方が現時点では高機能なようです。



・QTTabBarのインストール


・QTTabBarの自動化はこちらを参照


JAVAscrptを使うと自動化できますが、今回はvbsでjsファイルを生成、それを実行する、という方法で実現いています。私のようにvbs(≒vba)に慣れている人間ですと、vbsで全体を作り、どうしても実現できない部分のみ他の言語を使う方が圧倒的に楽です。vbsからJAVAscrptを引数を渡して実行することも可能ですが、今回はそうではなく、都度引数をはじめから組み込んだjsファイルを生成する方法を用いています。


vbsからjsファイルを実行する場合、最小2つのファイル(vbsとjs)が必要ですが、今回はjsファイルをその都度生成しますので、vbsファイルのみで実行できます。2ファイルあると、それぞれの置き場所や、バージョンなど管理の負荷が発生します。


数十行以内の短いプログラムなら今回の手法の方が扱いが使いやすいかもしれません。



サンプルプログラム

' インプットボックスを表示
strSearch = InputBox("検索するフォルダー名を入力してください", "", "")

If Len(strSearch) = 0 Then
    MsgBox "文字が入力されていないため処理を終了します。"
    WScript.Quit(1)
End If

'初期フォルダー設定
Set objFso = CreateObject("Scripting.FileSystemObject")
Set Folder = objFso.GetFolder("C:\test")

' 指定したパスにあるサブフォルダの数だけループ
For Each subFolder in Folder.subfolders
	If InStr(subFolder.Name, strSearch) > 0 Then
		foldername = "C:\\test" & "\\" & subFolder.Name
		Set Folder = Nothing
	End If
Next

' JSの作成
Set file = objFso.OpenTextFile("TE.js", 2, True)

' テキストファイルに書き込み
file.WriteLine("var pathDefault = """ & foldername & """;")
file.WriteLine("var extraView = ""Left"";    // this can be ""Bottom""")
file.WriteLine("var qs = new ActiveXObject( ""QTTabBarLib.Scripting"" );")
file.WriteLine("var wnd = qs.activewindow;")
file.WriteLine("if( wnd )")
file.WriteLine("{")
file.WriteLine("    var tab1 = wnd.invokeCommand( ""NewTab"", pathDefault );//NewWindowNewTab")
file.WriteLine("}")

file.Close'TE.jsを閉じる

'TE.jsの実行
Set objWsh = WScript.CreateObject("WScript.Shell")
objWsh.Run "cscript.exe TE.js",,True

'TE.jsの削除
Set objFile = objFso.GetFile("TE.js")
objFile.Delete 

以上をメモ帳などに貼り付け、任意の名前で保存してください。この時、拡張子をvbsにする必要がありますのと、文字コードをANSIに変更ください。あとは作成したファイルをダブルクリックすると起動します。


現時点で仕事の自動化を行う場合、使用頻度としてはVBA>Pythonと考えますが、JAVAscriptも使えると自動化できる幅が広がります。


一つ注意点が、vbsとJAVAscriptのパスの表記の違いです。vbsは「\(=

円マーク)」でつなぎますが、JAVAscriptは「\\(円マーク2個)」でつなぎます。




mailrogo.jpg
bottom of page