Posted at

VBScriptの対話コンソール(自作派/自作しない派)

More than 1 year has passed since last update.


概要

VBScriptの対話コンソール


自作しない派

VBScript from command line ? Yes with WSH Shell Console !を使う

かなりよい。

↓のようにmsgbox("hello")とやると、「終了後にhelloがポップアップし続ける」という謎の動作をする(タスクマネージャで止めれば止まる)。

wsh.PNG


自作派

VBScript interactive shell(from wayback machine)vbscript - How can I start an interactive console for VBS - Stack Overflowを見て作る。

こちらはmsgbox("hello")をしても終了後に連続ポップアップしない(ただし、色付けとかいろいろ低機能。)

w.png


自作派用コード

以下のvbsとbatを「同じフォルダ内に同じファイル名で保存する」(補足)。


vbs_interactive_shell.vbs

do while true

wscript.stdout.write(">>> ")
ln = wscript.stdin.readline
if lcase(trim(ln)) = "exit" then exit do
on error resume next
err.clear
execute ln
if err.number <> 0 then wscript.echo(err.description)
on error goto 0
loop


vbs_interactive_shell.bat

@cscript.exe //NoLogo %~dpn0.vbs



補足

バッチファイルのパスをC:\vbs_interactive_shell.batとする。


vbs_interactive_shell.bat

@cscript.exe //NoLogo %~dpn0.vbs


%~dpn0は、「実行されているファイルが置かれているカレントディレクトリとファイル名(拡張子を含まない)」になり、C:\vbs_interactive_shell.vbsが連結されることになる。

つまり、


vbs_interactive_shell.bat

@cscript.exe //NoLogo C:\vbs_interactive_shell.vbs


と展開されるので、vbsとbatは同じファイル名にする。


参考

%~dp0 とは - [コマンドプロンプト・バッチ_Windows]


つまり%~dp0 は、『実行されているファイルが置かれているカレントディレクトリ』を表します。

%~dp0 とは、%0にオプション構文の『 ~ 』と『 d 』と『 p 』が付いたものです。

それぞれを説明すると、

%0

実行されているファイルのパスです。

~

"(ダブルクオート)を除く

d

ドライブ文字だけに展開する

p

ファイル名を除くパスの部分に展開する


バッチファイルのパラメータのメモ - Segu Entirely Ginbis UMAUMA


~n: ファイル名


test.bat

@echo off

echo %0
echo %~d0
echo %~p0
echo %~n0
echo %~x0
echo %~dp0
echo %~pn0
echo %~dpn0
echo %~dpnx0




結果

test.bat

C:
\Users\username\
test
.bat
C:\Users\username\
\Users\username\test
C:\Users\username\test
C:\Users\username\test.bat