ふんわりした生活

本を読んだり仕事でやってみたことなどの日常から、ふんわりと気づきなどを書いていきます

コマンドラインからEvernoteを活用したいのに日本語が文字化けするので萎えた

なんだかモヤモヤするので未解決だけどエントリー。

皆さんはWindowsからEvernoteにノートを追加するとき、何を使われてますか?

普通は「Evernote for Windows」ですよね、きっと。 あるいは、ブラウザからクリッピングツールなんかで追加してるかもしれません。

もしかするとスマホからしかしないよ、ということのほうが多いかもしれない今日この頃…

モヤモヤしてること

ご存知の方はご存知だと思うのですが、Evernoteって自前のクリッピングツール(EvernoteClipper.exe)のためにCOMによるアクセスが許可されています。

また、公式にサポートされていることがわかっているのが「ENScript.exe」というコマンドラインツールを使っての操作です。

どちらも「Evernote for Windows」のインストールが必須なのですが。

何がモヤモヤしているかというと、どちらもあまりうまくいかないからです。

数年前に、自分の技術系のブログで次のような記事をエントリします。

http://m0t0k1x2.tumblr.com/post/69489147881/evernoteをvbaとかvbsから操作する
m0t0k1x2.tumblr.com

このときはなんら困ることなく上手く行っていたのですが、いま手元のWindows10でExcelVBAから実行するとうまくいきません。

COM+がこの操作に必要ですがインストールされていません

なんじゃそれ?と思いつつもわかりません。

PowerShell(32bit版)から次のようにやってもダメです。

$en = New-Object -ComObject "enapi.Evernote"

もしかするとクライアントのバージョンによっては使えなくしたのかもしれません。 公式サポートしているものでもないのに、問い合わせはやたらくる、などの理由でしょうか。

そういうことで、「ENScript.exe」のほうを使ってみることにしたのですが、便利なような不便なような。

ENScriptでノートを追加する

ENScriptはパスを追加しておけばコマンドプロンプトからでもPowerShellからでも、他からでも使うことができます。

ノートを追加する場合はコマンドとして「CreateNote」を指定します。もちろん、Windowsなので全部小文字でもOKです。

enscript createnote /u username /p password /i note-title /s filepath

こんな感じで、指定したユーザー名、パスワードを使ってノートを追加します。 なお、/iに半角スペースを続けてノートのタイトルを、/sに続けてノートに添付するテキストファイルを保存パスで指定します。

また、ノートを追加したいノートブックを指定するには/nに続けてノートブック名を、タグをつけたいときは/tに続けてタグ名を指定すればいいです。

さらに、ユーザー名とパスワードは省略したほうがいいでしょう。 というのも、省略しないと目に見える状態で入力することになりますし、省略するとENScriptが保存されているユーザー名とパスワードを使って良きようにとりはからってくれるからです。

ノートブック名も標準のノートブックを指定しているなら省略して構いません。

ということで、普通は次のようになります。

enscript /i note-title /s C:¥file¥path

簡単でしょう。

しかしここでもうまくいかないことがあってモヤモヤするのです。

/sにファイルパスを指定しないときは、標準入力から読み取ってノートのコンテンツにしてくれるという機能があります。

これを利用して、コマンドラインからノートに追加したいなーと思ったら次のようにすれば万事解決!と踏んだのですが…

踏んだのは罠だった

コマンドラインからテキストをノートのコンテンツにするなら、次のようにします。

まずはコマンドプロンプトから。

echo "日本語でおk" | enscript /i sample /s

次はPowerShellから。

"日本語で" | enscript /i sample /s

これがすべて文字化けになります。 Windowsはおろか、Mac版のクライアントでも、iOS版のクライアントでも、です。

しかし次のように日本語を含まない場合は文字化けしません。

"this is my text." | enscript /i sample /s

なんでやねん。

日本語がうまく解釈されていない?

文字コード問題だと思い、コマンドプロンプトUTF-8という文字コードに変更してからやってみました。 次のようにすればUTF-8にすることができます。ただし、日本語入力できなくなってしまいますが…

chcp 65001

結果はもちろんダメで、化けてます。

次に試したのはPowerShell文字コードを変更してみましたが、これもダメでした。 ファイルから読み込んだものを、というのもダメでした。

しかし、日本語ファイル名を指定しても、ノートタイトルに日本語を指定してもどちらも文字化けしません。 最後の手段で標準入力に渡すテキストをHTMLにもしてみましたが、ダメでした…

何が気に入らないのか

メモ的にテキストでノートのコンテンツへ入れたかったのですが、ファイル添付が基本のようです。

ちょっとしたことなんですけど、なんか作ったほうがいいのかな… と思いつつも、それだけのためになーと思うので、こういう用途にはOneNoteを使おうかと検討を始めたところです。

OneNoteだとCOM呼び出しはExcelなんかと同じで次の感じです。 XMLの操作になってしまいますけどね…

VBAだと

Dim on As New OneNote.Application

VBSだと

Dim on
Set on = CreateObject("OneNote.Application")

PowerShellだと

$on = New-Object -ComObject "OneNote.Application"

あ、PowerShellからだとReleaseComObjectで解放しましょう。 起動したままになってしまいますので。

[System.Runtime.InteropServices.Marshal]::ReleaseComObject($on)

できるポケット Evernote 基本&活用ワザ 完全ガイド

できるポケット Evernote 基本&活用ワザ 完全ガイド

Evernote豆技50選 (Espresso Books)

Evernote豆技50選 (Espresso Books)