カテゴリー別アーカイブ: batch

Windows版Anacondaのsilent install

Anacondaとは

Anacondaは数値計算とかに便利なライブラリが一式つまったpythonのディストリビューションです。
Download Anaconda Python Distribution

Windows版Anacondaのsilent install

Windowsの場合exe形式のインストーラーがあります。GUIのウィザードで簡単にインストールできますが、 コマンドひとつでサイレントインストールすることもできます。

Anaconda Install — Continuum documentation

Anaconda-2.x.x-Windows-x86[_64].exe /S /D=C:\Anaconda

/Sというオプション(スイッチ)がポイントですね。 /Dには導入するフォルダを指定します。一番最後に指定しましょう。 これでインストールではできるのですが、PATHの設定や使用ユーザーを設定したいときには次のようなオプションを設定できます。

  • /InstallationType=AllUsers [default:JustMe]
  • /AddToPath=[0|1] [default:1]
  • /RegisterPython=[0|1] [default:AllUsers:1, JustMe:0]

ちなみにこれらは/?というオプションをつけて実行すると確認できます。

例えばすべてのユーザー用にインストールし、PATHやRegistryを登録するサイレントインストールの方法は以下のコマンドになります。
ただしPATHやRegistryにきちんと登録するためには、コマンドプロンプトのアイコンのコンテキストメニュー(右クリックメニュー)から「管理者として実行」(Run As Administrator)で起動してから以下のコマンドを実行してください。

Anaconda-2.x.x-Windows-x86[_64].exe /InstallationType=AllUsers /AddToPath=1 /RegisterPython=1 /S /D=C:\Anaconda

バッチファイルで実行する場合

コマンドは一瞬で終了しますが、実は裏側でインストーラーが動いています。
バッチファイルなどでインストールが完了するまで待つためにはstartコマンドの/waitオプションを使います。詳しくはstart /?を参照してください。

以下は、32bit版Anacondaの2.0.1版をすべてのユーザー用にC:\Anacondaにインストールし、PATHとレジストリの設定まで行うものです。

set FILENAME=Anaconda-2.0.1-Windows-x86.exe
set PATHTO=C:\Anaconda
start "Anaconda Install" /wait "%FILENAME%" /S /InstallationType=AllUsers /AddToPath=1 /RegisterPython=1 /D=%PATHTO%

上のようにインストール先を変数で渡す場合、/D="%PATHTO"と書くとうまく行きません。
C:\Program Files\Anacondaのようにパスに空白を含む場合でも/D=%PATHTO%と書きましょう。
変数で渡さず直接インストール先のパスを書く場合は、/D=C:\Program File\Anacondaと書いても/D="C:\Program Files\Anaconda\"と書いてもどちらでも大丈夫なようです。

参考

Windows silent installation

Microsoft Office文書をOpenXML形式に変換する

Microsoft Office文書(Word,Excel,PowerPoint)をOpenXML形式に変換したい、そんなとき。

やりたいこと

要は次のようにしたい。

.doc
Microsoft Word 97-2003 文書
.docx
Microsoft Word 文書
.xls
Microsoft Excel 97-2003 ワークシート
.xlsx
Microsoft Excel ワークシート
.ppt
Microsoft PowerPoint 97-2003 プレゼンテーション
.pptx
Microsoft PowerPoint プレゼンテーション

もちろん、それぞれのソフトウェアを起動して「名前を付けて保存」するときに形式を指定してやればよいのだけれど、
ファイルが大量にあるときにはバッチ的に処理したい。

変換ツール

そこで、
2007 Microsoft Office System Migration Guidance: Microsoft Office Migration Planning Manager
Microsoft Office Compatibility Pack for Word, Excel, and PowerPoint File Formats
以上の2つをインストールすればそれができるらしい。

上のリンク先のガイド通りにインストールすると、 C:\ompm\ 以下にいろいろ展開される。
C:\ompm\Tools\ofc.ini の fldrに変換したい文書の入ってるフォルダを指定して実行。

ところが

PowerPoint(.ppt)がうまく変換されない。64bitマシンを使っていたせいか、C:\Program Files\Microsoft Office\Office14 に
Wordconv.exeとexcelcnv.exe はあるのに、PowerPointを変換しそうなヤツが見当たらないせいでエラーになる。
C:\Program Files (x86)\Microsoft Office\Office12 にPPCNVCOM.exeがいた。ついでにここにWordconv.exeとexcelcnv.exeもいた。

というわけでofc.exeなど使わずに、この3つを直接使うことに決めた。

それでコマンドプロンプトでなんとかしようとしたら、前記事「Windowsのコマンド・プロンプトの拡張子の取り扱い」の罠にはまった。
テキトーにやるとdocとdocx,xlsとxlsx,pptとpptxが区別できなくなったりするので注意。

変換コマンドの使い方

それぞれの使い方。出力ファイル名の拡張子にはxつけてあげる。

"C:\Program Files (x86)\Microsoft Office\Office12\Wordconv.exe" -oice -nme input_file output_file
"C:\Program Files (x86)\Microsoft Office\Office12\excelcnv.exe" -nme -oice input_file output_file
"C:\Program Files (x86)\Microsoft Office\Office12\PPCNVCOM.EXE" -oice input_file output_file

それにしてもこのコマンド群の統一感の無さ。とにかく見事にバラバラである。
● 変換の略し方(conv, cnv, CNVCOM)
● 大文字小文字(Word, excel PP)
● オプション引数の順序と数
オプションの意味はよくわからんのだが、順番がわりと大事だったりする。excelcnv.exe で -oice -nme って書いても動いてくれないのだ。
PowerPointでは-nme付かないし、いったいどうしてこんなことになちゃうんだろうか。

「こいつら全く別物だぜ!」というアピールなんだろうか。ユーザーはそんなの望んでないよね。
インターフェースの悪い例の良い見本だね。勉強になるね!

ところでこのdocx,xlsx,pptxにしたらサイズが小さくなったのだけど、これって要はzipでXMLファイルが圧縮されているのだね。
docx,xlsx,pptxをそれぞれzipという拡張子に変更して展開すれば、中にXMLファイルが入っているよ。

Windowsのコマンド・プロンプトの拡張子の取り扱い

[NT] コマンド プロンプトでの拡張子の取り扱い http://support.microsoft.com/kb/164351/ja

コマンド プロンプトからワイルドカードを使ってファイル管理を行う場合、3 文字を超える長い拡張子は、3 文字に切り詰められて取り扱われます。 というわけで、上のリンクのガイドに従って、レジストリエディタで HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem Win95TruncatedExtensions : REG_DWORD を 0 へ変更(デフォルトは 1)して、再起動 ところが、もう一度試してみても、やっぱり3 文字に切り詰められて取り扱われるのか、以下のようなコマンドを実行すると、ひっかかって欲しくない拡張子4文字以上のファイルもヒットしてしまう。

> dir /B *.htm
index.htm
index.html

このレジストリ値を変える以前に作ったファイルには効かないようだ。レジストリ変更後に作った拡張子4文字以降のファイルはちゃんとその通り扱われていた。 うっかり削除なんて事故も起きかねない。コマンド・プロンプトでワイルドカードを使うときは十分注意が必要だね。

CaboChaの文字コードRecompileしてもうまくいかない、そんなとき

CaboCha 0.60pre4 Windows版で辞書の文字コードを変えようと思ったのだけどうまくいかなかったときの話 CaboChaをインストールすると、スタートメニューには

  • Recompile SHIFT-JIS Model
  • Recompile UTF-8 Dictionary というのが用意されているのだけれど、これをこのまま実行してもCaboChaがうまく動作しないことがある。

症状

たとえば、文字コードをUTF-8からSHIFT-JISに変えようと思って「Recompile SHIFT-JIS Model」を実行。特にエラーもなく終了したので、CaboChaを実行すると、

morph.cpp(108) [charset() == decode_charset(dinfo->charset)] Incompatible charse
t: MeCab charset is SHIFT-JIS, Your charset is UTF8

となり係り受け解析ができない。

原因

Windows Vista以降で導入されたユーザーアカウント制御UAC(User Account Control)により、C:\Program Files\CaboCha\model\charset-file.txtの書き換えに失敗している。

C:\Program Files\CaboCha\model>echo SHIFT-JIS 1>charset-file.txt
アクセスが拒否されました。

対策

Recompileのバッチ実行後に直接C:\Program Files\CaboCha\model\charset-file.txtのファイルを書き換える。 もしくは、 C:\Program Files\CaboCha\model\mkmodel.batの1行目に以下を追加して、”管理者権限で”Recompileのバッチを実行する。

 cd /d %~dp0 

なぜだろう

UACにより書き込みが制限されるのであれば、最初からバッチコマンド自体を管理者権限で実行すればよいのでは? しかし次のようになってしまう。

C:\Windows\system32>..\bin\cabocha-model-index -f SHIFT-JIS -t SHIFT-JIS dep.ipa
.txt dep.ipa.model
指定されたパスが見つかりません。

C:\Windows\system32>..\bin\cabocha-model-index -f SHIFT-JIS -t SHIFT-JIS chunk.i
pa.txt chunk.ipa.model
指定されたパスが見つかりません。

C:\Windows\system32>..\bin\cabocha-model-index -f SHIFT-JIS -t SHIFT-JIS ne.ipa.
txt ne.ipa.model
指定されたパスが見つかりません。

C:\Windows\system32>echo SHIFT-JIS 1>charset-file.txt

実行ディレクトリが**C:\Windows\system32**になってしまうのだ。 そこで、バッチの先頭で実行ディレクトリに一旦移動する必要がある。それが上で追加したcd /d %~dp0だ。

これは他のバッチファイルでもよくハマるので、なんとなく心の片隅に入れとくとよい。

ちなみに毎回管理者として実行するには、 バッチのアイコンを右クリック→プロパティ→ショートカット→詳細設定→管理者として実行にチェック