2022年5月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
無料ブログはココログ

« 2017年8月 | トップページ | 2018年3月 »

2017年9月26日 (火)

utf-8からシフトjisに変換するバッチファイル

cmd.exeとchcp.comだけで、文字コード(Unicode、UTF-8、UTF-7、JIS、EUC-JP、SJIS)を変換する!: Windows Script Programming
を二つ組み合わせれば、任意の変換が可能。

u2s.cmd 旧utf-8ファイル名 新unicodeファイル名 新sjisファイル名

start /min /wait cmd /c chcp.com 65001 ^& ^( set /p x=""^<nul ^& cmd /u /c type %1 ^) ^>%2
start /min /wait cmd /c chcp.com 932 ^& cmd /c type %2 ^>%3

powershellを使えば何でもできるけど。。。

u2s.cmd 旧utf-8ファイル名 新sjisファイル名

powershell.exe "get-content -Encoding UTF8 '%~1' | Set-Content '%~2'"

補足
""はBOM(Byte Order Mark)、16進でFF FEなので、キーボードからは入力できません。コピーして貼り付けなら可能。

2017年9月 6日 (水)

edgeでファイル選択ダイアログボックスを出す「開く」は、

edgeでファイル選択ダイアログボックスを出す「開く」は、

open.htm

<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=shift_jis">
</head>
<body>
<input type=file id=FILE size="100">
<input type=button value="開く" onclick="if(FILE.value){location.assign(FILE.value);}">
</body>
</html>

コマンドプロンプトでhtmファイルにイントラネットのZoneIDを書き込む。

(
Echo [ZoneTransfer]
Echo ZoneId=1
) > "open.htm:Zone.Identifier"

このhtmファイルへの「お気に入り」をedgeにインポートする。

2017年9月 3日 (日)

edgeには、「名前を付けて保存」がない。「対象をファイルに保存」はある。

現ページのリンクを表示して、「対象をファイルに保存」が使えるようにすることはできる。

ブックマークレット
現ページのリンクを表示.url

javascript:(function (d){var a=d.createElement('a');a.href=location.href;a.textContent=d.title;a.setAttribute('style','position:fixed; z-index:5; background-color: yellow; left:100px; top:0px;');d.body.insertBefore(a,d.body.firstChild);})(document)

ただし、「対象をファイルに保存」では、htmlのみ。完全やアーカイブは不可。

ieでは、名前を付けて保存の代替に

javascript:(function(){document.execCommand('SaveAs',true,document.title);})()

が使えるのに、edgeでは(以前は使えたらしいが、今は)ダメ。

ローカルのhtmファイルをedgeで開くコマンドラインは?

edgeには「開く」がない。

ローカルのhtmファイルをedgeのウィンドウやショートカットにドロップできない。

唯一の方法、ローカルのhtmファイルを右クリック、「プログラムから開く」でedgeを選択。

コマンドラインで

start microsoft-edge:file:///c:/folder/file.htm

は、なぜかダメ。

コマンドラインで

start shell:AppsFolder\Microsoft.MicrosoftEdge_8wekyb3d8bbwe!MicrosoftEdge c:\folder\file.htm

で開く。

バッチファイルにドロップ.cmd

start shell:AppsFolder\Microsoft.MicrosoftEdge_8wekyb3d8bbwe!MicrosoftEdge %1

ショートカットにドロップ.lnk

cmd.exe /c start shell:AppsFolder\Microsoft.MicrosoftEdge_8wekyb3d8bbwe!MicrosoftEdge

VBSにドロップ.vbs

Set Shell=CreateObject("Shell.Application")
Call Shell.ShellExecute("shell:AppsFolder\Microsoft.MicrosoftEdge_8wekyb3d8bbwe!MicrosoftEdge",WScript.Arguments.Item(0),Null,Null,1)

Edgeで「開く」ブックマークレット

Edgeには「開く」がない。

アドレスバーに"パス名"を入れてもダメ。パス名ならよいけれど、"パス名"を貼り付けて、" "を外すのは面倒。

ブックマークレット
開く.url

javascript:(function(u){if(u){location.assign(u.replace(/\x22/g,''));}})(prompt('enter url or path'))

で" "を外して開く。

パス名に全角文字があると、wscript.shellのcreateshortcut(パス名)がエラーになることがある。

32bit windowsでは、パス名には260文字の制限があるが、16bit windowsでは、260バイトの制限である。
つまり、wscript.shellのcreateshortcut(パス名)も260バイトの制限である。

パス名に全角文字があると、260文字制限内でも、260バイト制限外になることがある。難儀な話。

wshのdrop handlerがパス名をshifted jisに変換する

wshのdrop handlerがパス名をshifted jisに変換する、つまりパス名が渡らない、のも、同じ原因ですね。

この場合は、ファイルクラスのdrop handlerを変えるのではなく、exeのdrop handler(unicode透過)を使うように、ファイルのショートカットをexeのショートカットに変える。

例えば、htafileにwshのdrop handlerを使うのではなく、
"htaファイル"のショートカットを
mshta.exe "htaファイル"
に書き換える。これにドロップすれば、unicode透過。

パス名に非jis文字があると、wscript.shellのcreateshortcut(パス名)が機能しない。

wshの内部文字コードは、windows 9x時代に作られたので、16bit windows流のmultibyte encoding、つまりshifted jisなのでしょう。
32bit windowsの内部文字コードはunicodeですが、wshは16bit windowsで作られたままなのでしょう。

したがって、パス名をshifted jisにリネームしてから、createshortcutを使う。

« 2017年8月 | トップページ | 2018年3月 »