拡張子からコンソール実行

提供: MeryWiki
2016年4月26日 (火) 00:58時点におけるYOS G-spec (トーク | 投稿記録)による版
ナビゲーションに移動 検索に移動

コンソール実行をVBSに移植して、1ファイルのみで多言語対応出来るように機能強化したものです。
拡張子からコマンドを判別するため、以前のように呼び出す時に設定する必要はありません。
足りない言語についても、Caseを追加して実行コマンドを設定することで使用できるようになります。
なお、いくつかのコマンドは動作確認出来ていないため、
その時は修正して使っていただくようお願いします。


' exec_cmd.vbs

'ファイルの保存
Document.Save()

'タイトル名  Document.Name:現在のファイル名
Dim TITLE
'実行コマンド
Dim EXEC_COMMAND
'使用エンジン
Function ENGINE(file_format)
	Select Case LCase(file_format)
		Case "js"	'JavaScript
			ENGINE="node"
			'ENGINE="jscript"
		Case "py"	'Python
			ENGINE="python"
			'ENGINE="pypy"
		Case "php"	'PHP
			ENGINE="php"
			'ENGINE="phalanger"
		Case "lua"	'Lua
			ENGINE="lua"
			'ENGINE="luajit"
		Case "l","lisp","lsp"	'LISP, CommonLisp
			ENGINE="clisp"
			'ENGINE="sbcl"
		Case "c","cpp"			'C, C++
			ENGINE="cl"
			'ENGINE="bcc"
			'ENGINE="g++"
	End Select
End Function
'パックファイル
Dim PKG_FILES

'ファイル名
Dim doc_names:doc_names=Split(Document.Name,".")
Dim file_format:file_format=doc_names(UBound(doc_names))
doc_names(UBound(doc_names))=""
Dim DOC_NAME:DOC_NAME=Mid(Join(doc_names,"."),1,UBound(doc_names))

Select Case LCase(file_format)
	Case "js"			'JavaScript
		Select Case ENGINE(file_format)
			Case "node"
				'デバッグオプション
				'一行目に //debug と加えることでデバッグモードでの実効を行う。
				Dim DEBUG:DEBUG=""
				If 0<Instr(LCase(Document.GetLine(1)),"//debug") Then
					DEBUG="debug "
				End If
				
				TITLE="Node.js " & Document.Name
				EXEC_COMMAND="node " & DEBUG & Document.Name

			Case "jscript"
				TITLE="WSH JScript " & Document.Name
				EXEC_COMMAND="cscript //nologo //E:JScript " & Document.Name
		End Select

	Case "vbs"		'VBScript
		TITLE="WSH VBScript " & Document.Name
		EXEC_COMMAND="cscript  //nologo //E:VBScript " & Document.Name

	Case "wsf"		'WSF
		TITLE="WSF " & Document.Name
		EXEC_COMMAND="cscript  //nologo " & Document.Name

	Case "rb"		'Ruby
		TITLE="Ruby " & Document.Name
		EXEC_COMMAND="ruby " & Document.Name

	Case "pl"		'Perl
		TITLE="Perl " & Document.Name
		EXEC_COMMAND="perl " & Document.Name

	Case "py"		'Python
		Select Case ENGINE(file_format)
			Case "python"
				TITLE="Python " & Document.Name
				EXEC_COMMAND="python " & Document.Name

			Case "pypy"
				TITLE="PyPy " & Document.Name
				EXEC_COMMAND="pypy " & Document.Name
		End Select
		
	Case "php"		'PHP
		Select Case ENGINE(file_format)
			Case "php"
				TITLE="PHP " & Document.Name
				EXEC_COMMAND="python " & Document.Name

			Case "phalanger"
				TITLE="Phalanger " & Document.Name
				EXEC_COMMAND="phpc " & Document.Name
		End Select

	Case "lua"		'Lua
		Select Case ENGINE(file_format)
			Case "lua"
				TITLE="Lua " & Document.Name
				EXEC_COMMAND="lua " & Document.Name

			Case "luajit"
				TITLE="LuaJIT " & Document.Name
				EXEC_COMMAND="luajit " & Document.Name
		End Select

	Case "cs"		'C#
		'コンパイルファイル選択
		'デフォルトでフォルダ内全てをコンパイル。
		'一行目に //only と加えることでそのファイルのみコンパイルを行う。
		PKG_FILES="*.cs"
		If 0<Instr(LCase(Document.GetLine(1)),"//only") Then
			PKG_FILES=Document.Name
		End If
		
		TITLE="C# "+ Document.Name
		EXEC_COMMAND= _
			"del " & DOC_NAME & ".exe & " & _
			"%SYSTEMROOT%\Microsoft.NET\Framework\v4.0.30319\csc /nologo /out:" & _
				DOC_NAME & ".exe " & PKG_FILES & " /optimize+ & " & _
			DOC_NAME & ".exe"

	Case "vb"		'VB.NET
		'コンパイルファイル選択
		'デフォルトでフォルダ内全てをコンパイル。
		'一行目に 'only と加えることでそのファイルのみコンパイルを行う。
		PKG_FILES="*.vb"
		If 0<Instr(LCase(Document.GetLine(1)),"'only") Then
			PKG_FILES=Document.Name
		End If
		
		TITLE="VB.NET "+ Document.Name
		EXEC_COMMAND= _
			"%SYSTEMROOT%\Microsoft.NET\Framework\v4.0.30319\vbc /nologo /out:" & _
				DOC_NAME & ".exe " & PKG_FILES & " /optimize+ & " & _
			DOC_NAME & ".exe"

	Case "ps1"		'PowerShell
		TITLE="PowerShell " & Document.Name
		EXEC_COMMAND="powershell " & Document.Name

	Case "l","lisp","lsp"	'LISP, CommonLisp
		Select Case ENGINE(file_format)
			Case "clisp"
				'コンパイルオプション
				'デフォルトではインタプリタとして実行する。
				'一行目に ;fas と加えることでfasファイルにコンパイルを行う。
				Dim COMPILE:COMPILE=""
				If 0<Instr(LCase(Document.GetLine(1)),";fas") Then
					COMPILE="-c "
				End If

				TITLE="CLISP " & Document.Name
				EXEC_COMMAND="clisp " & Document.Name

			Case "sbcl"
				TITLE="SBCL " & Document.Name
				EXEC_COMMAND="sbcl --script " & Document.Name
		End Select

	Case "scm"		'Scheme
		TITLE="Gauche" & Document.Name
		EXEC_COMMAND="gosh " & Document.Name

	Case "c","cpp"	'C, C++
		'コンパイルのみ
		Select Case ENGINE(file_format)
			Case "cl"
				TITLE="Visual C++ " & Document.Name
				EXEC_COMMAND="cl " & Document.Name & " & " & DOC_NAME & ".exe"
			Case "bcc"
				TITLE="Borland C++ " & Document.Name
				EXEC_COMMAND="bcc " & Document.Name & " & " & DOC_NAME & ".exe"
			Case "g++"
				TITLE="GNU GCC C++ " & Document.Name
				EXEC_COMMAND="g++ " & Document.Name & " & " & DOC_NAME & ".exe"
		End Select

	Case "d"		'D言語
		TITLE="D言語 " & Document.Name
		EXEC_COMMAND="dmd " & Document.Name & " & " & DOC_NAME & ".exe"

	Case "pas","pp"	'PASCAL
		TITLE="FreePascal " & Document.Name
		EXEC_COMMAND="fpc " & Document.Name & " & " & DOC_NAME & ".exe"

	Case "f90"		'Fortran
		TITLE="GFortran " & Document.Name
		EXEC_COMMAND="gfortran " & Document.Name & " & " & DOC_NAME & ".exe"

	Case "cas"		'CASL II
		TITLE="CASL II " & Document.Name
		EXEC_COMMAND="java -jar casl2.jar  " & Document.Name

	Case "bat"		'BAT
		TITLE="BAT " & Document.Name
		EXEC_COMMAND=Document.Name

	Case Else
		TITLE=Document.Name
		EXEC_COMMAND= Document.Name
End Select

'コマンドライン起動
Dim cmd:Set cmd = CreateObject("WScript.Shell")
cmd.Run _
	"cmd /C """ & _
	"title " & TITLE & " & " & _
	"cd/d " & Document.Path & " & " & _
	EXEC_COMMAND & " & " & _
	"pause > nul &" & _
	"exit""",1

Set cmd=Nothing
スポンサーリンク