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

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

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


#icon="exec_cmd.ico"
' exec_cmd.vbs

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

'保存してなければ終了。
If Document.Name="" Then
	MsgBox "ファイルが保存されてません。"
	Quit
End If

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

'パッケージファイル
Dim PKG_FILES
'コマンドオプション
Dim CMD_OPTION

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 と加えることでデバッグモードでの実行を行う。
				If load_option("//debug") Then
					CMD_OPTION="debug "
				Else
					CMD_OPTION=""
				End If
				
				TITLE="Node.js " & Document.Name
				EXEC_COMMAND="node " & CMD_OPTION & 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 "phpc"
				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 と加えることでそのファイルのみコンパイルを行う。
		If load_option("//only") Then
			PKG_FILES=Document.Name
		Else
			PKG_FILES="*.cs"
		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 と加えることでそのファイルのみコンパイルを行う。
		If load_option("'only") Then
			PKG_FILES=Document.Name
		Else
			PKG_FILES="*.vb"
		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ファイルにコンパイルを行う。
				If load_option(";fas") Then
					CMD_OPTION="-c "
				Else
					CMD_OPTION=""
				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 "bcc32"
				TITLE="Borland C++ " & Document.Name
				EXEC_COMMAND="bcc32 " & 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="JAVA 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

'コマンドラインオプションの読込
Function load_option(opt)
	load_option=Instr(LCase(Document.GetLine(1)),opt)
End Function
スポンサーリンク