システム実行でVBScriptを実行する

最終更新日:2021/3/23

LabVIEWでVBScriptを実行することを検討しました。Scriptの実行方法としては『システム実行』に掛けるか、ActiveXでコーディングすることになるかと思います。
ここでは単体で実行出来るVBScriptをLabVIEWからコールすることを検討します。

VBScriptは PDFファイルを纏めてフォルダに入れたモノをScriptにドロップすると、フォルダと同階層にフォルダ名+PDFで結合ファイルを作成するというモノです。実行環境にはAcrobatがインストールされている必要があります。

'**********************************************
' Acrobatを使ってフォルダ内のPDFファイルを結合するVBScript
' 入力フォルダ“ABC” 内部にPDF
' 出力ファイル“ABC.pdf”結合
'**********************************************
Option Explicit
 
Dim args
Dim f,n,ts,fp,fso,pdoc
Dim cntPDF
Dim cntOthers
Dim fn
Dim OutputFName
Dim CurDir
 
'初期化
cntPDF					= 0
cntOthers				= 0
Const PDSaveFull		= 1
 
Set args = WScript.Arguments
'パラメータ数チェック
If args.Count < 1 Then
	WScript.Echo "当スクリプトにフォルダをドラッグ&ドロップして処理を実行してください。"
	WScript.Quit
End If
 
Set fso = CreateObject("Scripting.FileSystemObject")
If Not fso.FolderExists(args(0)) Then
	WScript.Echo "フォルダが見つかりません。" & vbCrLf & "あるいはフォルダではありません。"
	WScript.Quit
Else
  	'出力先設定
	OutputFName	= fso.GetFolder(args(0)).Name
	CurDir		= fso.GetParentFolderName(args(0))
	fp	= fso.BuildPath(CurDir, OutputFName & ".pdf")
	With CreateObject("AcroExch.PDDoc")
		If .Create = True Then
			Set pdoc = CreateObject("AcroExch.PDDoc")
			'フォルダ内のファイルを一つ一つ確認する
		    For Each f In fso.GetFolder(args(0)).Files
		    	'拡張子を確認する
				Select Case LCase(fso.GetExtensionName(f.Path))
					Case "pdf":
						cntPDF = cntPDF + 1
						If pdoc.Open(f) = True Then
							.InsertPages .GetNumPages() - 1, pdoc, 0, pdoc.GetNumPages() - 1, True
							pdoc.Close
						End If
					Case Else:		cntOthers	= cntOthers + 1
				End Select
			Next
			.Save PDSaveFull, fp
			.Close
		End if
	End With
End If
 
MsgBox "結合ファイルを作成しました。"& vbCrLf &"PDFファイル数は" & cntPDF & "です。", vbInformation + vbSystemModal


これをLabVIEWで外部コントロールする方法としてシステム実行による手法を採ります。コマンドラインの書き方は、

wscript.exe {VBScript.vbsパス} {フォルダパス}

で良いはずで、コマンドプロンプトで実行すると以下のようになります。

LabVIEWからこのVBScriptを実行する場合ですが、以下のようにします。/cスイッチを忘れずに挿入してください。
また、cmd 無しでは機能しませんし、wscriptとすると、引数がうまく渡らないことが判っています。
コマンドラインに対する説明がなくなってきています。ここで一寸触れておきます。

https://www.pg-fl.jp/program/dos/doscmd/cmd.htm

上記サイトに触れられていることでいいのかと思われます。

cmdを明示化するのはコマンドプロンプトが起動しているかどうか判らないので明示的に起動させるためです。
続けてコマンドを実行させるためには cmd /c <command> or cmd /r <command> or cmd /k <command>と云う記述になるようです。/cと/rは同じで、<command>実行後cmdを終了させます。一方/kは<command>実行後cmdを終了せず残します。
/c,/r,/kを使用しなくても実行出来る場合がありますが、<command>に引数が有ったりした場合、必須になります。

/C (または /R /K) の後に続く文字列はスペースも含めてすべてコマンドラインと見なされるため、cmd.exe に他のオプションを指定する場合は /C (または /K)を必ず最後に指定します。


コマンドプロンプトを表示せずにコマンドラインを実行する方法は判りません。


戯言(nonsense)に戻る


免責事項

本ソフトウエアは、あなたに対して何も保証しません。本ソフトウエアの関係者(他の利用者も含む)は、あなたに対して一切責任を負いません。
あなたが、本ソフトウエアを利用(コンパイル後の再利用など全てを含む)する場合は、自己責任で行う必要があります。

本ソフトウエアの著作権はToolsBoxに帰属します。
本ソフトウエアをご利用の結果生じた損害について、ToolsBoxは一切責任を負いません。
ToolsBoxはコンテンツとして提供する全ての文章、画像等について、内容の合法性・正確性・安全性等、において最善の注意をし、作成していますが、保証するものではありません。
ToolsBoxはリンクをしている外部サイトについては、何ら保証しません。
ToolsBoxは事前の予告無く、本ソフトウエアの開発・提供を中止する可能性があります。

商標・登録商標

Microsoft、Windows、WindowsNTは米国Microsoft Corporationの米国およびその他の国における登録商標です。
Windows Vista、Windows XPは、米国Microsoft Corporation.の商品名称です。
LabVIEW、National Instruments、NI、ni.comはNational Instrumentsの登録商標です。
I2Cは、NXP Semiconductors社の登録商標です。
その他の企業名ならびに製品名は、それぞれの会社の商標もしくは登録商標です。
すべての商標および登録商標は、それぞれの所有者に帰属します。