SQLの窓 イラストAC フリー素材

2014年02月20日

バッチファイル : クリップボードからデータを読み込んで表示

クリップボードのデータを読み込んでいるのは、mshta.exe の引数内の VBScript のコードです。

clipboardData オブジェクトの getData メソッドで読み込んで、それをコマンドプロンプトの世界へ戻す為に標準出力に書き込んでいます。

コマンドプロンプトの世界でそれを取り出すには、標準入力を読み込む事のできるコマンドが必要なのですが、通常コマンドでは more か sort くらいしか無いので 2 行目で テンポラリフォルダに VBScript のコードを出力しています。その VBScript のコードを cscript //nologo で読み込んで使用しています(//nologo は、cscript が標準出力になにも出力しないようにする為のもの)。この結果、標準入力に渡ったデータをパイプ経由で入力して、Wscript.Echo で表示しています。

mshta.exe は、本来 hta アプリケーションを実行させるものですが、引数の使用が URL なので、URL と同等の vbscript: で直接処理を実行させています。

2 行目では、 cmd.exe /c "" という構文で、"" の中にコマンド一式を記述する事によって、特殊記号のエスケープの問題が出ないように考慮しています。

※ 注意 : & は ^ でエスケープする必要があります
@echo off
cmd.exe /c "echo Dim Input:Input="":Do While Not WScript.StdIn.AtEndOfStream:Input=Input^&WScript.StdIn.ReadAll:Loop:WScript.Echo Input > %temp%\_.vbs"
mshta.exe "vbscript:Execute("str=window.clipboardData.getData(""text""):CreateObject(""Scripting.FileSystemObject"").GetStandardStream(1).Write(str^&""""):close")" | cscript //nologo %temp%\_.vbs




posted by at 2014-02-20 23:58 | コマンドプロンプト | このブログの読者になる | 更新情報をチェックする