拡張子からコンソール実行
ナビゲーションに移動
検索に移動
概要
コンソール実行をVBSに移植して、1ファイルのみで多言語対応出来るように機能強化したものです。
拡張子からコマンドを判別するため、以前のように呼び出す時に設定する必要はありません。
足りない言語についても、Caseを追加して実行コマンドを設定することで使用できるようになります。
不具合要望などは以下のリンクまで。
もう少しリファレンス
対応済み言語処理系一覧
C、C++(VC++、BCC32、GCC、G++)、D、C#、Java、Scala、Groovy、Perl、PHP(Phalanger)、Go、Dart、
JavaScript(Node.js、JScript、JScript.NET、Rhino)、TypeScript、Fortran(G)、VBScript、VB.NET、
Pascal(FPC)、Ada(GNAT)、Ruby(JRuby、IronRuby)、Lua(JIT)、Python(PyPy)、CoffeeScript、
CommonLisp(CLISP、SBCL、MKCL、CCL)、Scheme(Gauche)、Clojure(JVM、CLR)、F#、Haskell(GHC)、
CASL II、NASM、.NetIL(ilasm)、BAT、WSF、PowerShell
※ただし、基本的にはパスが通っていることが前提。
HSPはコマンドラインコンパイラが標準で用意されていないため断念。(同様になでしこ。)
公式プラグインのHSPコンパイル実行プラグインをご利用ください。
ZIP
ダウンロード【2016/05/01版】
旧版
変換済みicoファイル込
アイコン
ソース
- exec_cmd.vbs
#icon="exec_cmd.ico"
#title="コンソール実行"
' 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"
'ENGINE="jsc"
'ENGINE="rhino"
'Ruby
Case "rb"
ENGINE="ruby"
'ENGINE="jruby"
'ENGINE="ir"
'Python
Case "py"
ENGINE="python"
'ENGINE="pypy"
'PHP
Case "php"
ENGINE="php"
'ENGINE="phpc"
'Lua
Case "lua"
ENGINE="lua"
'ENGINE="luajit"
'C, C++
Case "c","cpp"
'ENGINE="cl"
'ENGINE="bcc32"
'ENGINE="gcc"
ENGINE="g++"
'LISP, CommonLisp
Case "l","lisp","lsp"
ENGINE="clisp"
ENGINE="sbcl"
'ENGINE="ccl"
'ENGINE="ccl64"
ENGINE="mkcl"
'Clojure
Case "clj"
ENGINE="clojure"
'ENGINE="clojure-clr"
End Select
End Function
'エンジンのパス パスが通しにくかったり通らないものを記述
Function ENGINE_PATH(file_format)
Select Case LCase(file_format)
'JScript.NET
Case "jsc"
ENGINE_PATH="%SYSTEMROOT%\Microsoft.NET\Framework\v2.0.50727"
'TypeScript
Case "ts"
'ENGINE_PATH="%ProgramFiles%\Microsoft SDKs\TypeScript\1.0"
'ENGINE_PATH="%ProgramFiles(x86)%\Microsoft SDKs\TypeScript\1.0"
ENGINE_PATH="%APPDATA%\npm"
'CoffeeScript
Case "coffee"
ENGINE_PATH="%APPDATA%\npm"
'C#, VB.NET
Case "cs","vb"
ENGINE_PATH="%SYSTEMROOT%\Microsoft.NET\Framework\v4.0.30319"
'ENGINE_PATH="%ProgramFiles%\MSBuild\12.0\Bin"
'ENGINE_PATH="%ProgramFiles%\MSBuild\14.0\Bin"
'ENGINE_PATH="%ProgramFiles(x86)%\MSBuild\12.0\Bin"
'ENGINE_PATH="%ProgramFiles(x86)%\MSBuild\14.0\Bin"
'F#
Case "fs"
ENGINE_PATH="%ProgramFiles%\Microsoft SDKs\F#\3.1\Framework\v4.0"
'ENGINE_PATH="%ProgramFiles(x86)%\Microsoft SDKs\F#\3.1\Framework\v4.0"
'Rhino
Case "rhino"
ENGINE_PATH="%HOMEDRIVE%\rhino"
'Clojure(JVM)
Case "clojure"
'clojure-x.x.xのバージョン表記"-x.x.x"を消すと動かなくなる。
ENGINE_PATH="%HOMEDRIVE%\clojure-1.8.0"
'CASL II
Case "cas"
ENGINE_PATH="%HOMEDRIVE%\javaCASL2"
'NASM LINK用(VC++必須)
Case "link"
ENGINE_PATH="%ProgramFiles%\Microsoft Visual Studio 12.0\VC\bin"
'ENGINE_PATH="%ProgramFiles(x86)%\Microsoft Visual Studio 12.0\VC\bin"
Case "msvcrt"
ENGINE_PATH="%ProgramFiles%\Microsoft Visual Studio 12.0\VC\lib"
'ENGINE_PATH="%ProgramFiles(x86)%Microsoft Visual Studio 12.0\VC\lib"
Case "kernel32"
ENGINE_PATH="%ProgramFiles%\Microsoft SDKs\Windows\v7.1A\Lib"
'ENGINE_PATH="%ProgramFiles(x86)%\Microsoft SDKs\Windows\v7.1A\Lib"
Case "addlib"
'ライブラリが他に必要であれば空白区切りで与えてください。
'(ファイルパスに空白を含む時は注意)
ENGINE_PATH=""
'NASM LINK用ここまで
'.NetILアセンブラ
Case "il"
ENGINE_PATH="%SYSTEMROOT%\Microsoft.NET\Framework\v4.0.30319"
End Select
End Function
'パッケージファイル
Dim PKG_FILES
'コマンドオプション
Dim CMD_OPTION
'ビルドメッセージ
Dim BUILDED
BUILDED="Echo Complited."
Dim br:br=" & " '改行用
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=Join(doc_names,".")
DOC_NAME=Mid(DOC_NAME,1,Len(DOC_NAME)-1)
'実行時exe, classにコンパイルする形式の場合は一行目にコメントで
' delexe, delclass を含めることで事前にexe, classを削除することができます。
'タイトル、実行コマンド
Select Case LCase(file_format)
Case "c","cpp" 'C, C++
Select Case ENGINE(file_format)
Case "cl" 'Visual C++
TITLE="Visual C++ " & Document.Name
EXEC_COMMAND=Join(Array( _
"cl ",Document.Name,br, _
DOC_NAME,".exe" _
),"")
Case "bcc32" 'Borland C++
TITLE="Borland C++ " & Document.Name
EXEC_COMMAND=Join(Array( _
"bcc32 ",Document.Name,br, _
DOC_NAME,".exe" _
),"")
Case "gcc" 'GCC C
TITLE="GCC C " & Document.Name
EXEC_COMMAND=Join(Array( _
"gcc -o ",DOC_NAME,".exe ",Document.Name,br, _
DOC_NAME,".exe" _
),"")
Case "g++" 'GCC C++
TITLE="GCC C++ " & Document.Name
EXEC_COMMAND=Join(Array( _
"g++ -o ",DOC_NAME,".exe ",Document.Name,br, _
DOC_NAME,".exe" _
),"")
End Select
Case "d" 'D言語
TITLE="D言語 " & Document.Name
EXEC_COMMAND="dmd " & Document.Name & br & DOC_NAME & ".exe"
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=Join(Array( _
"""",ENGINE_PATH(file_format),"\csc"" ", _
"/nologo /out:",DOC_NAME,".exe ",PKG_FILES," /optimize+",br, _
DOC_NAME,".exe" _
),"")
Case "java" 'Java
'jar化は手順が面倒そうなので保留
TITLE="Java " & Document.Name
EXEC_COMMAND=Join(Array( _
"javac ",Document.Name,br, _
"java ",DOC_NAME _
),"")
Case "scala" 'Scala
'コンパイルオプション
'一行目に //class と加えることでclassファイルにコンパイルを行う。
TITLE="Scala " & Document.Name
If load_option("//class") Then
EXEC_COMMAND="scalac " & Document.Name
Else
EXEC_COMMAND="scala " & Document.Name
End If
Case "groovy" 'Groovy
'コンパイルオプション
'一行目に //class と加えることでclassファイルにコンパイルを行う。
TITLE="Groovy " & Document.Name
If load_option("//class") Then
EXEC_COMMAND="groovyc " & Document.Name
Else
EXEC_COMMAND="groovy " & Document.Name
End If
Case "pl" 'Perl
TITLE="Perl " & Document.Name
EXEC_COMMAND="perl " & Document.Name
Case "php" 'PHP
Select Case ENGINE(file_format)
Case "php" 'PHP
TITLE="PHP " & Document.Name
EXEC_COMMAND="php " & Document.Name
Case "phpc" 'Phalanger
TITLE="Phalanger " & Document.Name
EXEC_COMMAND=Join(Array( _
"phpc /debug- /quiet ",Document.Name,br, _
"bin\",DOC_NAME,".exe" _
),"")
End Select
Case "go" 'Go
'コンパイルオプション
'一行目に//buildでビルドを行う。
If load_option("//build") Then
CMD_OPTION="build"
Else
CMD_OPTION="run"
End If
Case "dart" 'Dart
TITLE="Dart " & Document.Name
EXEC_COMMAND=Join(Array( _
"dart ",Document.Name _
),"")
Case "js" 'JavaScript
Select Case ENGINE(file_format)
Case "node" 'Node.js
'デバッグオプション
'一行目に //debug と加えることでデバッグモードでの実行を行う。
If load_option("//debug") Then
CMD_OPTION="debug"
Else
CMD_OPTION=""
End If
TITLE="Node.js " & Document.Name
EXEC_COMMAND=Join(Array("node ",CMD_OPTION," ",Document.Name),"")
Case "jscript" 'JScript
TITLE="JScript " & Document.Name
EXEC_COMMAND="cscript //nologo //E:JScript " & Document.Name
Case "jsc" 'JScript.NET
PKG_FILES=Document.Name
TITLE="JScript.NET "+ Document.Name
EXEC_COMMAND=Join(Array( _
"""",ENGINE_PATH(ENGINE(file_format)),"\jsc"" /nologo /out:", _
DOC_NAME,".exe ",PKG_FILES,br, _
DOC_NAME,".exe" _
),"")
Case "rhino" 'Rhino
TITLE="Rhino " & Document.Name
EXEC_COMMAND=Join(Array("java -jar ",ENGINE_PATH(ENGINE(file_format)),"\js.jar ",Document.Name),"")
End Select
Case "ts" 'TypeScript
TITLE="TypeScript to " & ENGINE("js") & " " & Document.Name
EXEC_COMMAND=Join(Array("""",ENGINE_PATH(file_format),"\tsc"" ",Document.Name,br),"")
'エンジン選択
Select Case ENGINE("js")
Case "node" 'Node.js
EXEC_COMMAND=Join(Array(EXEC_COMMAND, _
"node ",DOC_NAME,".js" _
),"")
Case "jscript" 'JScript
EXEC_COMMAND=Join(Array(EXEC_COMMAND, _
"cscript //nologo //E:JScript ",DOC_NAME,".js" _
),"")
End Select
Case "f","f90","f95","f03" 'Fortran
TITLE="GFortran " & Document.Name
EXEC_COMMAND=Join(Array( _
"gfortran -o ",DOC_NAME," ",Document.Name,br, _
DOC_NAME,".exe" _
),"")
Case "vbs" 'VBScript
TITLE="VBScript " & Document.Name
EXEC_COMMAND="cscript //nologo //E:VBScript " & Document.Name
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=Join(Array( _
"""",ENGINE_PATH(file_format),"\vbc""", _
" /nologo /out:",DOC_NAME,".exe ",PKG_FILES," /optimize+",br, _
DOC_NAME,".exe" _
),"")
Case "pas","pp" 'PASCAL
TITLE="FreePascal " & Document.Name
EXEC_COMMAND=Join(Array( _
"fpc ",Document.Name,br, _
DOC_NAME,".exe" _
),"")
Case "adb" 'Ada
TITLE="GNAT Ada " & Document.Name
EXEC_COMMAND=Join(Array( _
"gnatmake ",Document.Name,br _
,DOC_NAME,".exe" _
),"")
Case "rb" 'Ruby
TITLE="Ruby " & Document.Name
EXEC_COMMAND="ruby " & Document.Name
Select Case ENGINE(file_format)
Case "ruby" 'Ruby
TITLE="Ruby " & Document.Name
EXEC_COMMAND="ruby " & Document.Name
Case "jruby" 'JRuby
TITLE="JRuby " & Document.Name
EXEC_COMMAND="jruby " & Document.Name
Case "ir" 'IronRuby
TITLE="IronRuby " & Document.Name
EXEC_COMMAND="ir " & Document.Name
End Select
Case "lua" 'Lua
Select Case ENGINE(file_format)
Case "lua" 'Lua
TITLE="Lua " & Document.Name
EXEC_COMMAND="lua " & Document.Name
Case "luajit" 'LuaJIT
TITLE="LuaJIT " & Document.Name
EXEC_COMMAND="luajit " & Document.Name
End Select
Case "py" 'Python
Select Case ENGINE(file_format)
Case "python" 'Python
TITLE="Python " & Document.Name
EXEC_COMMAND="python " & Document.Name
Case "pypy" 'PyPy
TITLE="PyPy " & Document.Name
EXEC_COMMAND="pypy " & Document.Name
End Select
Case "coffee" 'CoffeeScript
'コンパイルオプション
'一行目に #js と加えることでjsファイルにコンパイルを行う。
If load_option("#js") Then
CMD_OPTION="--compile"
Else
CMD_OPTION=""
BUILDED=""
End If
TITLE="CoffeeScript " & Document.Name
EXEC_COMMAND=Join(Array( _
"""",ENGINE_PATH(file_format),"\coffee"" ",CMD_OPTION," ",Document.Name _
),"")
Case "l","lisp","lsp" 'LISP, CommonLisp
Select Case ENGINE(file_format)
Case "clisp" 'CLISP
'コンパイルオプション
'一行目に ;fas と加えることでfasファイルにコンパイルを行う。
If load_option(";fas") Then
CMD_OPTION="-c"
Else
CMD_OPTION=""
End If
TITLE="CLISP " & Document.Name
EXEC_COMMAND=Join(Array("clisp ",CMD_OPTION," ",Document.Name),"")
Case "sbcl" 'SteelBankCommonLisp
'コンパイルオプション
'一行目に ;fasl と加えることでfaslファイルにコンパイルを行う。
'(Macros\exec_cmdフォルダにexec_sbcl_comp.lisp 必須)
If load_option(";fasl") Then
Dim me_paths:me_paths=Split(Editor.FullName,"\")
me_paths(UBound(me_paths))=""
'Macrosフォルダのパス取得
Dim me_path:me_path=Join(me_paths,"\") & "Macros\exec_cmd\"
CMD_OPTION=me_path & "exec_sbcl_comp.lisp"
Else
CMD_OPTION=""
End If
TITLE="SBCL " & Document.Name
EXEC_COMMAND=Join(Array( _
"sbcl --script ",CMD_OPTION," ",Document.Name _
),"")
Case "ccl" 'ClozureLisp
'オプション無し。コンパイルはlispファイルに以下のような設定文を書き加える。
'(ccl:save-application "hello.exe" ;ファイル名
' :toplevel-function #'main ;初期起動関数
' :prepend-kernel t)
TITLE="ClozureLisp " & Document.Name
EXEC_COMMAND="wx86cl --load " & Document.Name
Case "ccl64" 'ClozureLisp64
TITLE="ClozureLisp " & Document.Name
EXEC_COMMAND="wx86cl64 --load " & Document.Name
Case "mkcl" 'ManKaiCommonLisp
'コンパイルオプション
'一行目に ;fas でfasファイル生成。
' ;exe でexeファイル生成
If load_option(";fas") Then
CMD_OPTION="-compile " & Document.Name
ElseIf load_option(";exe") Then
TITLE="MKCL " & Document.Name
CMD_OPTION=Join(Array( _
"-not-fasl-p -compile ",Document.Name,br, _
"timeout /t 1 > nul",br, _
"mkcl -o ",DOC_NAME,".exe -link ",DOC_NAME,".o",br, _
BUILDED _
),"")
'mkcl -not-fasl-p -compile a.lisp & mkcl -o a.exe -link a.o
'exe化失敗を防ぐためにwaitの小細工
Else
CMD_OPTION="-shell " & Document.Name
End If
TITLE="MKCL " & Document.Name
EXEC_COMMAND="mkcl " & CMD_OPTION
End Select
Case "scm" 'Scheme
TITLE="Gauche " & Document.Name
EXEC_COMMAND="gosh " & Document.Name
Case "clj" 'Clojure
Select Case ENGINE(file_format)
Case "clojure" 'Clojure(JVM)
Dim version
version=Split(ENGINE_PATH(ENGINE(file_format)),"-")
TITLE="Clojure " & Document.Name
EXEC_COMMAND=Join(Array( _
"java -jar """,ENGINE_PATH(ENGINE(file_format)), _
"\clojure-",version(UBound(version)),".jar"" ",Document.Name _
),"")
Case "clojure-clr" 'ClojureCLR
TITLE="ClojureCLR " & Document.Name
EXEC_COMMAND="Clojure.Main " & Document.Name
End Select
Case "fs" 'F#
PKG_FILES=Document.Name
TITLE="F# "+ Document.Name
EXEC_COMMAND=Join(Array( _
"""",ENGINE_PATH(file_format),"\fsc""", _
" --nologo --out:",DOC_NAME,".exe ",PKG_FILES," --optimize+",br, _
DOC_NAME,".exe" _
),"")
Case "hs" 'Haskell
TITLE="GHC " & Document.Name
EXEC_COMMAND=Join(Array( _
"ghc --make ",Document.Name,br, _
DOC_NAME,".exe" _
),"")
Case "cas" 'CASL II
TITLE="Java CASL II " & Document.Name
EXEC_COMMAND=Join(Array( _
"java -jar """,ENGINE_PATH(file_format),"\casl2.jar"" ",Document.Name,br, _
"java -jar ",ENGINE(file_format),"\run.jar ",DOC_NAME,".obj" _
),"")
Case "asm" 'NASM
TITLE="NAST " & Document.Name
EXEC_COMMAND=Join(Array("nasm -f win32 ",Document.Name,br, _
"""",ENGINE_PATH("link"),"\link"" /nologo /out:",DOC_NAME,".exe ",DOC_NAME,".obj ", _
"""",ENGINE_PATH("msvcrt"),"\msvcrt.lib"" """,ENGINE_PATH("kernel32"),"\Kernel32.lib"" ", _
ENGINE_PATH("addlib"),br, _
DOC_NAME,".exe" _
),"")
Case "il" '.NetILアセンブラ
TITLE=".NetIL " & Document.Name
EXEC_COMMAND=Join(Array( _
"""",ENGINE_PATH(file_format),"\ilasm"" /nologo /quiet ",Document.Name,br, _
DOC_NAME,".exe" _
),"")
Case "bat" 'BAT
TITLE="BAT " & Document.Name
EXEC_COMMAND=Document.Name
Case "wsf" 'WSF
TITLE="WSF " & Document.Name
EXEC_COMMAND="cscript //nologo " & Document.Name
Case "ps1" 'PowerShell
TITLE="PowerShell " & Document.Name
EXEC_COMMAND="powershell " & Document.Name
Case Else
TITLE=Document.Name
EXEC_COMMAND=Document.Name
End Select
'コマンドライン起動
Dim cmd:Set cmd = CreateObject("WScript.Shell")
cmd.Run Join(Array( _
"cmd /C """, _
"title ",TITLE,br, _
"cd/d ",Document.Path,br, _
DEL_BINARY(), _
EXEC_COMMAND,br, _
"pause > nul",br, _
"exit"""),""),1
Set cmd=Nothing
'コマンドラインオプションの読込
Function load_option(opt)
load_option=Instr(LCase(Document.GetLine(1)),opt)
End Function
'exe又はclassファイルを削除するかどうか
Function DEL_BINARY()
If load_option("delexe") Then
DEL_BINARY=Join(Array("del ",DOC_NAME,".exe",br),"")
ElseIf load_option("delclass") Then
DEL_BINARY=Join(Array("del ",DOC_NAME,".class",br),"")
Else
DEL_BINARY=""
End IF
End Function
- exec_sbcl_comp.lisp
;exec_sbcl_comp.lisp
;exec_cmd.vbs SBCLコンパイル用
;Mery以下のMacro\exec_cmd\に配置してください。
(compile-file (elt *posix-argv* 1))
スポンサーリンク