PATH 環境変数をセミコロンで区切って一行づつ表示するバッチファイル( path-list.bat )

echo で VBScript の実行文を表示して、%temp%\_.vbs に書き出してそのまま実行するという、バッチファイルです。システム用とユーザ用を別々に作成して実行しています。

PATH コマンドの代りに使えます。

@echo off
echo ▼ システム
cmd /c echo Set ws=WScript.CreateObject("WScript.Shell"):Set wv=ws.Environment("SYSTEM"):pt=wv("PATH"):ad=Split(pt,";"):For I=0 To Ubound(ad):Wscript.echo ws.ExpandEnvironmentStrings(ad(I)):Next>%temp%\_.vbs&cscript.exe /NOLOGO %temp%\_.vbs
echo ▼ ユーザ
cmd /c echo Set ws=WScript.CreateObject("WScript.Shell"):Set wv=ws.Environment("USER"):pt=wv("PATH"):ad=Split(pt,";"):For I=0 To Ubound(ad):Wscript.echo ws.ExpandEnvironmentStrings(ad(I)):Next>%temp%\_.vbs&cscript.exe /NOLOGO %temp%\_.vbs
pause







VBScript で架空の氏名を作成するスクリプト / ( .WSF )

選択する漢字によっては、さらに架空度が増します。

結果をコマンドプロンプトへ出力する事を前提としているので、Wscript.exe でスクリプトが実行された場合、Crun という関数で コマンドプロンプトを開いて cscript.exe でスクリプトを強制的に再実行させるようにしています。

<JOB>
<OBJECT id="WshShell" progid="WScript.Shell" />
<SCRIPT language="VBScript">
' ***********************************************************
' 処理開始
' ***********************************************************
nMax = 20	' 取得する人数

Crun

' 1、2 は教育漢字の最初
strName1 = "愛悪圧安暗案以位囲委意易異移胃衣遺医域育一印員因引飲院右宇羽"
strName2 = "雨運雲営映栄永泳英衛液益駅円園延沿演遠塩央往応横王黄億屋恩温"
strName3 = "男也一行樹之朗七人"
strName4 = "子代美恵"

For i = 1 to nMax

	' 姓1文字目
	nTarget = Random( 1, Len(strName1) )
	strName = Mid( strName1, nTarget, 1 )

	' 1文字目と2文字目が一致したら除外
	nTarget2 = nTarget
	Do while( nTarget = nTarget2 )
		nTarget2 = Random( 1, Len(strName1) )
	Loop

	' 姓2文字目
	strName = strName & Mid( strName1, nTarget2, 1 ) & " "

	' 名1文字目
	nTarget = Random( 1, Len(strName2) )
	strName = strName & Mid( strName2, nTarget, 1 )

	' 性別
	nTarget = Random( 0, 1 )

	' 性別によって名2文字目を決定
	if nTarget = 0 then
		nTarget = Random( 1, Len(strName3) )
		strName = strName & Mid( strName3, nTarget, 1 )
	else
		nTarget = Random( 1, Len(strName4) )
		strName = strName & Mid( strName4, nTarget, 1 )
	end if
	
	Wscript.Echo strName

Next

' ***********************************************************
' 範囲内ランダム値取得
' ***********************************************************
Function Random( nMin, nMax )

	Randomize
	Random = nMin + Int(Rnd * (nMax - nMin + 1))

End function

' ***********************************************************
' Cscript.exe で強制実行
' ***********************************************************
Function Crun( )

	Dim str

	str = WScript.FullName
	str = Right( str, 11 )
	str = Ucase( str )
	if str <> "CSCRIPT.EXE" then
		str = WScript.ScriptFullName
		strParam = " "
		For I = 0 to Wscript.Arguments.Count - 1
			if instr(Wscript.Arguments(I), " ") < 1 then
				strParam = strParam & Wscript.Arguments(I) & " "
			else
				strParam = strParam & Dd(Wscript.Arguments(I)) & " "
			end if
		Next
		Call WshShell.Run( "cmd.exe /c cscript.exe " & Dd(str) & strParam & " & pause", 3 )
		WScript.Quit
	end if

End Function

' ***********************************************************
' ダブルクォート
' ***********************************************************
Function Dd( strValue )

	Dd = """" & strValue & """"

End function

</SCRIPT>
</JOB>


💙 例えば...
院引 演恵
域院 雲恵
衣位 応行
印意 央樹
羽因 往恵
院意 応行
位胃 沿子
囲移 塩子
異因 映代
以引 雨人
圧因 塩代
域右 温七
易育 延七
右委 黄子
異引 雲美
圧衣 園朗
愛員 王七
悪右 英之
圧遺 益樹
院暗 横美

VBScript を使用してプリンタ名の一覧を取得する


※ 一覧なので、cscript.exe PrinterList.vbs としたほうがいいでしょう。( スクリプトでは、Wscript.exe で実行した場合 コマンドプロンプトを開いて Cscript.exe で実行しなおすようになっています )



item.Name は FolderItem オブジェクトのプロパティです
FolderItem Properties (Windows)

Crun

Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.NameSpace(&H4)
Set colItems = objFolder.Items

For each item in colItems

	if item.Name <> "プリンタの追加" then
		Wscript.Echo item.Name
	end if

Next

' **********************************************************
' Cscript.exe で実行を強制
' Cscript.exe の実行終了後 pause で一時停止
' **********************************************************
Function Crun( )

	Dim str,WshShell

	str = WScript.FullName
	str = Right( str, 11 )
	str = Ucase( str )
	if str <> "CSCRIPT.EXE" then
		str = WScript.ScriptFullName

		Set WshShell = CreateObject( "WScript.Shell" )

		strParam = " "
		For I = 0 to Wscript.Arguments.Count - 1
			if instr(Wscript.Arguments(I), " ") < 1 then
				strParam = strParam & Wscript.Arguments(I) & " "
			else
				strParam = strParam & Dd(Wscript.Arguments(I)) & " "
			end if
		Next
		Call WshShell.Run( "cmd.exe /c cscript.exe " & Dd(str) & strParam & " & pause", 1 )
		WScript.Quit
	end if

End Function
' **********************************************************
' 文字列を " で囲む関数
' **********************************************************
Function Dd( strValue )

	Dd = """" & strValue & """"

End function




エクスプローラ ( explorer.exe ) の再起動 / VBScript



レジストリで設定した内容を Windows に即時に反映させる必要がある時に使用します。

例えばショートカットのファイルは拡張子 .lnk が付いているのですが、一般的に表示される事はありません。これを表示させるには簡単で、手動でレジストリの コンピューター\HKEY_CLASSES_ROOT\lnkfile の中のエントリである NeverShowExt をAllwaysShowExt に名称変更すると .lnk が表示されるようになります。但しすぐには反映されないのでエクスプローラを再起動して即座に反映させます。

' **********************************************************
' エクスプローラ(explorer.exe) の再起動
' **********************************************************
strTarget = "explorer.exe"

' 起動用
Set WshShell = CreateObject( "WScript.Shell" )
' WMI用
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")

' いったん終了させます
Set colProcessList = objWMIService.ExecQuery _ 
	("Select * from Win32_Process Where Name = '"&strTarget&"'") 
For Each objProcess in colProcessList
	on error resume next
	' 通常はこれで終了されるはず
	objProcess.Terminate() 
	if Err.Number <> 0 then
		' もし終了できなかった場合の強制終了
		Call WshShell.Run("taskkill /F /PID " & objProcess.ProcessId, 0 ) 
	end if
	on error goto 0
Next 

' 少し待ちます
Wscript.Sleep(500)
' エクスプローラを起動
WshShell.Run( strTarget )






VBScript で 32ビット ODBC ドライバの一覧を取得する( ODBC 接続のドライバ文字列を正しく取得したい )

Windows でデータベースに接続する際、ODBC データソースに登録せずに動的に利用する場合には、ドライバの正しい文字列が必要になリます。レジストリエディタで参照すればいいのですが、結構面倒なのでこのスクリプトを使えばすぐ取り出せます。

最初の『管理者として cscript 実行を強制する』は、cscript での実行を強制するついでに実装しています。(なんらかの制限環境でも動くようにとの考慮です。)

目的は、レジストリのキーの一覧ですが、キーの一覧は知る限り、WMI でしか取得できないので、GetObject("Winmgmts:root\default:StdRegProv") でレジストリ処理用のオブジェクトを取得して使用します。

一覧表示は、cscript で実行を強制しているので単純に Wscript.Echo で出力。コマンドプロンプトを新たに作成して実行するので、結果の表示を止めるために、Wscript.StdIn.ReadLine です。
' 管理者として cscript 実行を強制する
Set obj = Wscript.CreateObject("Shell.Application")
if Wscript.Arguments.Count = 0 then
	obj.ShellExecute "cscript.exe", WScript.ScriptFullName & " runas", "", "runas", 1
	Wscript.Quit
end if

const WMI_HKEY_LOCAL_MACHINE = &H80000002

Set objRegistry = GetObject("Winmgmts:root\default:StdRegProv")

strBasePath = "SOFTWARE\Wow6432Node\ODBC\ODBCINST.INI"

Call objRegistry.EnumKey( WMI_HKEY_LOCAL_MACHINE, strBasePath, aKeys )

For Each strKeyPath in aKeys
	Wscript.Echo strKeyPath
Next

Wscript.StdIn.ReadLine

実際はいくつか変なのが混じっていますが ODBC 接続のドライバ文字列が欲しい場合を想定しているので、その場合はそれは排除して見れると思います。



※ コマンドプロンプトのプロパティで、簡易編集モードを ON にして、範囲をドラッグして右クリックでコピーできます。

※ コマンドプロンプトならば、『reg query HKLM\SOFTWARE\Wow6432Node\ODBC\ODBCINST.INI』ですから、リダイレクトしてファイルに表示結果を書き込めばいいでしょう( 但し、キーが全て表示されるのでとても見にくいです )
reg query HKLM\SOFTWARE\Wow6432Node\ODBC\ODBCINST.INI > list.txt

PHP で MySQL のクエリテストする為のコード( Bootstrap 仕様 )

$_GET['text'] で入力された SQL が引き渡されます。
※ GET コマンドなので、IE11 以外ならば SQLは アドレスバーで直接入力ができると思います。
※ php-mysql-test.php?text=SQL文

テーブルの表現には Bootstrap を使用しています( 一応スマホではテーブル部分のみ横スクロールします )

QueryString に text が無い場合と text に有効な文字が全く無い場合は  show variables でシステム変数の一覧を表示します
<?php
// キャッシュを使用しない
session_cache_limiter('nocache');
session_start();

// UTF-8
header( "Content-Type: text/html; charset=utf-8" );

?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta content="width=device-width initial-scale=1.0 minimum-scale=1.0 maximum-scale=1.0 user-scalable=no" name="viewport">
<title>SQL実行結果</title> 
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.3.1/css/bootstrap.css" />
<style>
/*
罫線等のテーブルのレイアウトは、Bootstrap にて適用
table {
	border: solid 1px #000;
	border-collapse: collapse;
}

th,td {
	border: solid 1px #000;
	padding: 5px;
}
*/
</style>
</head>
<body>
<!-- Bootstrap の alert でタイトル -->
<div class="alert alert-dark">
	MySQL Query TEST
</div>

<?php
if ( !isset( $_GET['text'] ) || trim($_GET['text']) == "" ) {
	// クエリ初期値は システム変数一覧
	$_GET['text'] = "show variables";
}

// P で挟んだデータの出力
print_cell_html( "p", $_GET['text'] );

$server = 'localhost';
$dbname = 'lightbox';
$user = 'root';
$password = 'パスワード';

// ***************************
// 接続
// ***************************
$mysqli = @ new mysqli($server, $user, $password, $dbname);
if ($mysqli->connect_error) {
	print "接続エラーです : ({$mysqli->connect_errno}) ({$mysqli->connect_error})";
	exit();
}

// ***************************
// クライアントの文字セット
// ***************************
$mysqli->set_charset("utf8"); 

// ***************************
// クエリ
// ***************************
$result = $mysqli->query($_GET['text']);
if ( !$result ) {
	print "\n";
	print "<span style='color:#f00'>error : " . $mysqli->error . "</span>";
	exit();
}

// ***************************
// 列数
// ***************************
$nfield = $result->field_count;
if ( $nfield ) {
	$ncount = 0;
	print "<div class='table-responsive-sm'>";
	print "<table class='table table-bordered table-hover'><thead class='thead-dark'>\n";

	// 行番号用タイトル
	print "\t<th></th>";

	// 列のタイトルを作成
	$field = $result->fetch_fields( );
	for( $i = 0; $i < $nfield; $i++ ) {

		// TH で挟んだデータの出力
		print_cell_html( "th", $field[$i]->name );

	}

	print "</thead>\n<tbody>\n";

	// ***************************
	// 行データ
	// ※ 結果の行を数値添字配列で取得
	// ***************************
	while ($row = $result->fetch_row()) {

		print "<tr>\n\t";
		// 行番号

		// TDで挟んだデータの出力
		print_cell_html( "td", ($ncount + 1) );

		for( $i = 0; $i < $nfield; $i++ ) {

			// TDで挟んだデータの出力
			print_cell_html( "td", $row[$i] );

		}
		print "\n</tr>\n";

		// 行番号
		$ncount++;
	}

	print "</tbody></table>";
	print "</div>";

}

// ***************************
// 接続解除
// ***************************
$mysqli->close();


// ***************************
// セルの HTML 出力関数
// ***************************
function print_cell_html( $html, $data ) {

print <<<CELL_HTML
<{$html}>{$data}</{$html}>
CELL_HTML;

}

?>

</body>
</html>




jQuery で TABLE の 行内の 一つのTD をクリック。その後、他の TD 内のテキストを取得する / nextAll と prevAll

nextAll は、起点となる要素から下方向に存在する同じ階層の要素を全て取得します。引数にセレクタが指定できるので、ここでは TD にクラスを設定して目的の要素を特定しています。

特定する要素の属性が無い場合は、$(this).nextAll().eq(0).text() のようにして eq(順序番号) を指定して特定できます。但し、prevAll では近い要素から順序番号が小さくなるので注意して下さい。

コード 名称 金額 購入日 担当者 発注先
0002 問題集 002 4000 2015/08/24 田中 発注先002
0003 問題集 003 3000 2015/08/23 山田 発注先003
0004 問題集 004 2000 2015/08/22 山田 発注先004
0001 問題集 001 1000 2015/08/21 田中 発注先001
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
$(function() {

	// 名称のリンクに設定したクラスでイベント作成
	// ※ 各 td のクラスで取得
	$(".check").on("click", function(){
		$("#cd").val($(this).prevAll(".t0").text());
		$("#name").val($(this).text());
		$("#kin").val($(this).nextAll(".t1").text());
		$("#bdate").val($(this).nextAll(".t2").text());
		$("#tanto").val($(this).nextAll(".t3").text());
		$("#co").val($(this).nextAll(".t4").text());
	});

	// 購入日のリンクに設定したクラスでイベント作成
	// ※ 各 td の順序で取得
	$(".t2").on("click", function(){
		$("#cd").val($(this).prevAll().eq(2).text());
		$("#name").val($(this).prevAll().eq(1).text());
		$("#kin").val($(this).prevAll().eq(0).text());
		$("#bdate").val($(this).text());
		$("#tanto").val($(this).nextAll().eq(0).text());
		$("#co").val($(this).nextAll().eq(1).text());
	});

});

</script>
<style type="text/css">
.check, .t2 {
	text-decoration: underline;
	cursor: pointer;
	color: blue;
}
#target_area th, #target_area td {
	padding: 5px;
}
#target_area input {
	width:120px;
	font-size: 18px;
}
#target_area table {
	margin-top: 10px;
	border-collapse: collapse;
	border: solid #000000 1px;
	background-color: #ffffff;
}
#target_area th {
	border: solid #000000 1px;
	background-color: silver;
}
#target_area td {
	border: solid #000000 1px;
}
</style>
<div id="target_area">
<p><input id="cd"> <input id="name"> <input id="kin"></p>
<p><input id="bdate"> <input id="tanto"> <input id="co"></p>
<table>
	<tbody>
	<tr>
		<th>コード</th>
		<th>名称</th>
		<th>金額</th>
		<th>購入日</th>
		<th>担当者</th>
		<th>発注先</th>
	</tr>
	<tr>
		<td class="t0">0002</td>
		<td class="check">問題集 002</td>
		<td class="t1">4000</td>
		<td class="t2">2015/08/24</td>
		<td class="t3">田中</td>
		<td class="t4">発注先002</td>
	</tr>
	<tr>
		<td class="t0">0003</td>
		<td class="check">問題集 003</td>
		<td class="t1">3000</td>
		<td class="t2">2015/08/23</td>
		<td class="t3">山田</td>
		<td class="t4">発注先003</td>
	</tr>
	<tr>
		<td class="t0">0004</td>
		<td class="check">問題集 004</td>
		<td class="t1">2000</td>
		<td class="t2">2015/08/22</td>
		<td class="t3">山田</td>
		<td class="t4">発注先004</td>
	</tr>
	<tr>
		<td class="t0">0001</td>
		<td class="check">問題集 001</td>
		<td class="t1">1000</td>
		<td class="t2">2015/08/21</td>
		<td class="t3">田中</td>
		<td class="t4">発注先001</td>
	</tr>
	</tbody>
</table>
</div>






「送る」に入れる簡易ダンプ ( VBScript )





※コマンドプロンプトの操作
Q : 終了します。
スペースキー : 次ページを表示します。
Enterキー : 次の行を表示します


自分で環境を作って、VBScript のコードファイルも自分で配置する場合は以下をご覧下さい。

SendTo フォルダにショートカットを作成する



この時、作業フォルダーを用意してそこに VBScript のコードファイルを保存します。実行するコマンドラインは以下のようになっています。

%windir%\system32\wscript.exe dump.vbs 35

35 は、コマンドプロンプトに一度に表示する行数です

dump.vbs( 作業フォルダーに置いてください )
if WScript.Arguments.Count = 1 then
	strMessage = "送るから実行して下さい" & vbCrLf & vbCrLf
	strMessage = strMessage & "※ リンク先の最後の数字はコマンドプロンプトの行数です   " & vbCrLf
	strMessage = strMessage & "※ プロパティよりウインドウを最大化する方法もあります   " & vbCrLf
	Call MsgBox(strMessage,0,"lightbox")
	Wscript.Quit
end if

Set WshShell = CreateObject( "WScript.Shell" )   
Set Fso = CreateObject( "Scripting.FileSystemObject" )

strCurPath = WScript.ScriptFullName
Set obj = Fso.GetFile( strCurPath )
Set obj = obj.ParentFolder
strCurPath = obj.Path

strCommand = "cmd /c mode CON lines="&WScript.Arguments(0)&" & cscript.exe """ & _
strCurPath & "\dump_c.vbs"" """ & WScript.Arguments(1) & """ | more & pause"
Call WshShell.Run( strCommand )


dump_c.vbs
' ****************************************************
' ファイルを16進数でダンプします
' ****************************************************
Dim Fs,Stream
Dim InFile
Dim Kana
Dim KjFlg
Kana = Array( _
"。","「","」","、","・","ヲ","ァ","ィ","ゥ","ェ","ォ","ャ","ュ","ョ","ッ", _
"ー","ア","イ","ウ","エ","オ","カ","キ","ク","ケ","コ","サ","シ","ス","セ","ソ", _
"タ","チ","ツ","テ","ト","ナ","ニ","ヌ","ネ","ノ","ハ","ヒ","フ","ヘ","ホ","マ", _
"ミ","ム","メ","モ","ヤ","ユ","ヨ","ラ","リ","ル","レ","ロ","ワ","ン","゙","゚" )

Set Fs = CreateObject( "Scripting.FileSystemObject" )
Set Stream = CreateObject("ADODB.Stream")

InFile = WScript.Arguments(0)

Dim LineBuffer,DispBuffer,CWork,nCnt,strBuff,i,j

if not Fs.FileExists( InFile ) then
	Wscript.Echo "ファイルが存在しません"
	Wscript.Quit
end if

' ------------------------------------------------------
' Stream のオープン
Stream.Open
 
' ------------------------------------------------------
' Stream タイプの指定
Stream.Type = 1		' StreamTypeEnum の adTypeBinary
 
' ------------------------------------------------------
' 既存ファイルの内容を Stream に読み込む
Stream.LoadFromFile InFile
 
' ------------------------------------------------------
' バイナリ型の Stream オブジェクトからを読み取って加工
Bcnt = 0
nCnt = 0
KjFlg = ""

Do while not Stream.EOS

	if ( nCnt MOD 16 ) = 0 then
		Wscript.Echo "          0  1  2  3  4  5  6  7" _
		& "  8  9  A  B  C  D  E  F"
		Wscript.Echo "--------------------------------" _
		& "------------------------------------------"
	end if

	' 16 バイトの読込
	LineBuffer = Stream.Read(16)

	strBuff = ""
	For i = 1 to LenB( LineBuffer )
		CWork = MidB(LineBuffer,i,1)
		Cwork = AscB(Cwork)
		Cwork = Hex(Cwork)
		Cwork = Ucase(Cwork)
		Cwork = Right( "0" & Cwork, 2 )
		DispBuffer = DispBuffer & Cwork & " "
		strBuff = strBuff & CharConv( Cwork )
	Next

	Wscript.Echo _
		Right( _
			"00000000" & Ucase(Hex( nCnt * 16 )), 8 _
		) & " " & _
		Left(DispBuffer & String(49," "), 49 ) & strBuff
	DispBuffer = ""

	nCnt = nCnt + 1
 
Loop
 
' ------------------------------------------------------
' Stream を閉じる
Stream.Close

Set Stream = Nothing
Stream = Empty
Set Fs = Nothing
Fs = Empty

' ****************************************************
' 生データのテキスト
' ****************************************************
function CharConv( HexCode )

	Dim nCode

	nCode = Cint( "&H" & HexCode )

	if KjFlg = "" then
		if &H81 <= nCode and nCode <= &H84 or _
			&H88 <= nCode and nCode <= &H9f or _
			&HE0 <= nCode and nCode <= &HEA then
			KjFlg = HexCode
			CharConv = ""
			Exit Function
		end if
	else
		if HexCode <> "00" then
			KjFlg = KjFlg & HexCode
			CharConv = Chr( Cint( "&H" & KjFlg ) )
		else
			CharConv = ".."
		end if
		KjFlg = ""
		Exit Function
	end if

	if 0 <= nCode and nCode <= &H1F then
		CharConv = "."
	end if
	if &H20 <= nCode and nCode <= &H7E then
		CharConv = Chr(nCode)
	end if
	if &H7F <= nCode and nCode <= &HA0 then
		CharConv = "."
	end if
	if &HA1 <= nCode and nCode <= &HDF then
		CharConv = Kana(nCode-&HA1)
	end if
	if &HE0 <= nCode and nCode <= &HFF then
		CharConv = "."
	end if

end function

ショートカットを直接実行すると、以下のようなダイアログが出ます



最大化は、dump.vbs の 17行目からを、画面の解像度に合わせてカラム数を以下のように設定して実行時のウインドウを選択すると実装できます( ただ、ダンプの表示幅が決まっているのでこの場合あまり意味ありません )

strCommand = "cmd /c mode CON cols=160 & cscript.exe """ & _
strCurPath & "\dump_c.vbs"" """ & WScript.Arguments(1) & """ | more & pause"
Call WshShell.Run( strCommand, 3 )

操作補足

エクスプローラで SendTo フォルダに移動するには、アドレスバーに sendto と直接入力します。





GUID を取得してクリップボードにコピーする ( VBScript )

TypeLib.Guid で取得するのですが、取得した文字列の最後に NULL が現れるので Left 関数で文字列のみを取得しなおしています。

1) 最も多様なテクニックを使用して取得

クリップボードへのアクセスは clip.exe 
( コマンドプロンプトでリダイレクトが必要です )
' GUID 取得用
Set TypeLib = CreateObject("Scriptlet.TypeLib")

' 外部実行・環境変数取得用
Set WshShell = WScript.CreateObject("WScript.Shell")

' テキストファイル出力用
Set Fs = CreateObject( "Scripting.FileSystemObject" )

' テンポラリフォルダの取得
TempFolder = WshShell.ExpandEnvironmentStrings("%TEMP%")

' テキストファイルを出力用に開く
Set OutObj = Fs.OpenTextFile( TempFolder & "\_guid_text.txt", 2, True )

' GUID を出力
guid = Left( TypeLib.Guid & "", 38 )
OutObj.Write guid

' clip.exe を使用してクリップボードにコピー
' ※ 同期処理でコマンドプロンプトを表示しません
Call WshShell.Run( "cmd.exe /c clip.exe < """ & TempFolder & "\_guid_text.txt""",0, True )

' メッセージ
MsgBox( guid & " をクリップボードにコピーしました" )


2) clip.exe を使用したセオリー的な取得

クリップボードへのアクセスは clip.exe 
( コマンドプロンプトでリダイレクトが必要です )
' GUID 取得用
Set TypeLib = CreateObject("Scriptlet.TypeLib")

' 外部実行
Set WshShell = WScript.CreateObject("WScript.Shell")

' GUID を取得
guid = Left( TypeLib.Guid & "", 38 )

' clip.exe を使用してクリップボードにコピー
' ※ 同期処理でコマンドプロンプトを表示して一旦停止します
' 1) テキストの内容をクリップボードにコピー]
' 2) メッセージ
' 3) pause で停止
Call WshShell.Run( "cmd.exe /c echo " & guid & " | clip.exe & echo " & guid & " をクリップボードにコピーしました" & " & pause", , True )


3) InternetExplorer.Application でクリップボードへコピーする
' GUID 取得用
Set TypeLib = CreateObject("Scriptlet.TypeLib")

' クリップボード用
' ※ HTA 等では直接 window.clipboardData より実行
' ※ するように書き換える必要があります
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Navigate("about:blank")
Do While objIE.Busy
	' 100 ミリ秒
	Wscript.Sleep 100
Loop

Call objIE.document.parentWindow.clipboardData.SetData( "Text", TypeLib.Guid & "" )
objIE.Quit

WScript.Echo "クリップボードにコピーしました" & vbCrLf & vbCrLf & TypeLib.Guid


4) 自分でクリップボードへコピーする
' GUID 取得用
Set TypeLib = CreateObject("Scriptlet.TypeLib")

Call InputBox("コピーして使用して下さい","新しい GUID を取得しました",TypeLib.Guid)





VBScript の 関数定義を WEB 上に置いて PC で使用する

まず、WEB 側に置くコードですが、Content-Type を text/plain にする為に、PHP で httpヘッダーを記述します。.htaccess で記述してもかまいませんが、WEB上の好きな場所を移動しやすくする為に php で記述しておくのが一番いいと思います。

ソースのキャラクタセットは shift_jis で保存して shift_jis として httpヘッダーに出力します。こうしておくと、PC 側で ServerXMLHTTP を使って読み出して、動的に関数を定義する事も可能になります。( 動的に定義する場合は、UTF-8 で問題ありません )

WEB 側に VBScript のコードを置いて動的に定義する場合の注意として重要なルールが二つあります。

1) シングルクォートのコメントを使用しない
2) 条件式の = を使用しない

何れも VBScript の構文解析の問題らしいです。
<?php
header( "Content-Type: text/plain; charset=shift_jis" );
header( "Expires: Thu, 19 Nov 1981 08:52:00 GMT" );
header( "Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0" );
header( "Pragma: no-cache" );
?>
REM **********************************************************
REM 正規表現のトリム
REM **********************************************************
Function RegTrim( strValue )

	Dim regEx, str

	Set regEx = New RegExp
	regEx.IgnoreCase = True
	regEx.Pattern = "^[ \s]+"
	str = regEx.Replace( strValue, "" )
	regEx.Pattern = "[ \s]+$"
	RegTrim = regEx.Replace( str, "" )

End Function


この関数は、VBScript の正規表現を使って文字列の左右の空白文字を漢字スペースも含めて取り除くものです。

PC 側の定義は通常通りですが、script 要素の src 属性で web 上の場所を指定する事になります。拡張子を .wsf にしてWscript.exe か Cscript.exe で実行します( 通常はエクスプローラからダブルクリックです )
<job>
<script language="VBScript" src="http://toolbox.winofsql.jp/vbs/regtrim.php"></script>
<script language="VBScript">

str = RegTrim( getResource( "mydata" ) )
MsgBox( "/" & str & "/" )

</script>
<resource id="mydata">


    この部分のみ取り出します    


</resource>
</job>

resource 要素では、ソースコード内にテキストデータを用意できるのでソースコードを準備しておいて、プログラムを登録したい時に使ったりします

但し、そのような場合は文の中に < があるとエラーになるので以下のように記述します
<job>
<script language="VBScript" src="http://toolbox.winofsql.jp/vbs/regtrim.php"></script>
<script language="VBScript">

str = RegTrim( getResource( "mydata" ) )
MsgBox( "/" & str & "/" )

</script>
<resource id="mydata">
<![CDATA[

    この部分のみ  <  取り出します    

]]>
</resource>
</job>