
エクスプローラのアドレスバーなどです。

サンプルで作成したハイパーリンクをWordファイルなどに貼りつけることは可能ですが、そのWordファイルが「http://~」で始まるアドレスに移動した場合、そのリンクは無効になってしまいます。

「http://~」で始まるアドレスに移動する場合は、ハイパーリンクのリンク先アドレスを少し変える必要があります。
具体的には以下のようにすれば良いです。
リンク先: \\PC名\app\aaa.txt ←これでは開けない
リンク先: file:///\\PC名\app\aaa.txt ←これなら開ける
まず、リンク先が「\\PC名\app\aaa.txt」の状態で、ファイルをwebサーバにアップロードして、そのファイルを開いてみるとリンク先は「http://~~~~/~~~/\\PC名\app\aaa,txt」のようになってしまいます。

しかしリンク先文字列が「file:///」から始まっている場合は、webサーバにアップロードしてから開いた場合も「file:///~」というアドレスにリンクされることになります。
「アドレス」が「file:///~」なら

ファイルをwebサーバにアップロードした後も、リンク先は「file:///~」になっている。

以下、サンプル
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<job> | |
<script> | |
arg = WScript.Arguments, L=arg.length | |
// 引数がなければ終了する | |
if(!L){ | |
WScript.Echo('WSFファイルに、ファイルかフォルダをドラッグ&ドロップしてください') | |
WScript.Quit() | |
} | |
fs = new ActiveXObject('Scripting.FileSystemObject') | |
shell = new ActiveXObject('WScript.Shell') | |
WshNetwork = WScript.CreateObject("WScript.Network") | |
// ネットワークドライブのドライブ文字vsネットワークパスの組み合わせを取得する | |
drives = WshNetwork.EnumNetworkDrives() | |
objDrive={} | |
for(var i=0,L=drives.length;i<L;i+=2){ | |
objDrive[drives.Item(i)] = drives.Item(i+1) | |
} | |
getPathUNC = function(p){ | |
if(unc = objDrive[fs.GetDriveName(p)]){ | |
return unc + p.replace(/^[A-Z]:/,'') | |
}else{ | |
return 共有(p) | |
} | |
} | |
// 共有設定しているフォルダ内のファイルにも対応する | |
arr共有=[] | |
objEnum = new Enumerator(WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer().ExecQuery("Select * From Win32_Share")) | |
for(i=0; !objEnum.atEnd() ;objEnum.moveNext()){ | |
item = objEnum.item() | |
if(!item.path){continue} // IPC$はpath無いので何にでもマッチしてしまう | |
arr共有[i++] = {path:item.path, name:item.name} | |
} | |
arr共有len = arr共有.length | |
reg = /[\\\/]$/ | |
共有=function(path){ | |
for(var i=0;i<arr共有len;i++){ | |
// index=0以外は無視 | |
if(path.indexOf(arr共有[i].path)){continue} | |
var head='\\\\'+WshNetwork.computerName+'\\'+arr共有[i].name | |
return head+(head.match(reg)?'':'\\')+path.slice(arr共有[i].path.length, path.length) | |
} | |
return path | |
} | |
str = '' | |
for(i=0,L=arg.length;i<L;i++){ | |
path = getPathUNC(arg(i)) | |
// 2016/10/27 下記URLのページを参考にして使用禁止文字の種類を追加(丸かっこはOKなのかNGなのかよく分からないが、実際のところ使えるようなので、ここでは無視する) | |
// https://www.ipentec.com/document/document.aspx?page=web-url-invalid-char | |
if(path.match(/([<>#"%\{\}|^\[\]\'])/)){ | |
// URLでの使用禁止文字が含まれている場合、リンクにできない。 | |
str += '下記URLは「'+RegExp.$1+'」を含んでいるため、リンクできません。<br>'+path+'<br><br>' | |
}else{ | |
// 円マークやスペースのエスケープはしなくても良いっぽい(動作した) | |
// 先頭に「file:///」を追加するだけにする。 | |
// 2016/10/27 PC名に「-」が含まれている場合を考慮して[\w]を[-\w]に変更した。 | |
path = path.replace(/\//g,'\\').replace(/^(\\\\[-\w]+\\)/,'file:///$1') | |
// リンクを追加する。 | |
str += '<a href="'+path+'">'+path+'</a><br><br>' | |
} | |
} | |
ヘッダー = [ | |
'<html><title>リンク作成</title><'+'script>', | |
'onload=function(){resizeTo(tbl.offsetWidth+60, tbl.offsetHeight+60)}', | |
'<'+'/script><body><table id=tbl><td>' | |
].join('\r\n') | |
フッター = '</td></table></body></html>' | |
path = fs.GetSpecialFolder(2)+'/リンク作成.hta' | |
with(fs.CreateTextFile(path)){ | |
Write(ヘッダー+str+フッター) | |
Close() | |
} | |
shell.run(path, 1, true) | |
// 多重起動した場合は先に閉じられたヤツで削除されるので、ファイルの有無を判定する。 | |
if(fs.FileExists(path)){fs.DeleteFile(path)} | |
</script> | |
</job> |
0 件のコメント:
コメントを投稿