細かいこと *

バッチファイル *

コマンドの羅列を拡張子batのテキストファイルに保存すればバッチファイルが出来上がり、実行すればコマンド群が次々に実行される。非常に今さら感のある技術で、今ならVBScriptなんかを使うべきだとは思うが、その単純さが便利な場合もある。

引数としてスラッシュ区切りのパスを受け取るプログラムがあり、円マーク(バックスラッシュ)区切りのパスをお手軽に変換する方法はないものかと考えていた時に作ったのが、以下の文字列置換バッチファイルである。

@echo off
set arg=%1

REM replace "\" to "/"
set str=%arg:\=/%
C:\myprogram.exe %str%

解説ページも以外と多い。

ネットワークとか共有とかアカウントとか *

Windowsネットワークによるファイルやプリンタの共有は、型にはまると便利だが、何かとよくわからんトラブルを起こすので個人的には嫌い。

netコマンド *

ネットワーク周りの事は、実は殆どコマンドラインから行うことができる。一連の操作は net なるコマンドから初まる。この辺が使いこなせれば、Windowsネットワークのストレスも減るのかも。

XPのフォルダ共有 *

XPになってフォルダ共有のインターフェースが大きく様変わりしたが、フォルダオプションから「簡易ファイルの共有を使用する」のチェックを外すことにより、Windows 2000と同様のインターフェースが戻ってくる。

Everyoneとanonymous *

WindowsXP上で共有フォルダを作成し、「アクセス許可」をEveryoneにした。このXPマシンに、Windows2000マシンでアクセスしようとすると「パスワードおよびユーザー名が必要です」と言われた。ここで、XPマシンに存在しない適当なユーザー名とパスワードを入力すると、各種共有オジェクトは見えるが、アクセスしようとすると拒否された。一方、XPマシンに存在するユーザー名を入れると無事にアクセスできた。つまり、"Everyone"つうのは、「このマシン(この場合、XPマシン)上にアカウントを持っている人全員」という意味であり、anonymousじゃあないんだろうなと思った。

ユーザーの「リセット」 *

共有フォルダにアクセスする際に、うっかりユーザー名間違えて入力しちゃった場合を考える。再入力を促されるなら問題ないが、上の「Everyoneとanonymous」の場合のように、なまじ共有フォルダが見える所まで来ちゃう(XPのGuest権限?全くわからん)と、できる事はアクセスを拒否られる事だけである。こんな時には正しい名前を入力し直したいと思うわけであるが、このためにはコマンドプロンプトから

net use /delete remote_name

としてやると良い。remote_nameは"\\(コンピュータ名)\(共有名 or IPC$)"で、net use とすると一覧が参照できる。こうすると当該接続が切断されるので、また改めて共有フォルダをクリックなどすると、ユーザー名の入力を再び促されるようになる。いちいちログオフしたり再起動する必要はないのである。

面倒なら

net use /delete *

とすれば、既存の接続を全て切断できる。

「このコマンドを処理するのに必要な記憶域をサーバーで確保できません。」 *

XPでこんなエラーが出て共有できない事態が発生した。意外にpopularなトラブルらしく、検索すると同様の事例がちらほら。

要は「IRPstackSize」なるパラメタの数値を上げろとのこと。私の環境では該当するパラメタがなかったので新たに作成した。15にするとうまくいったという報告が多かったが、私の環境では15ではうまくいかなかった。短気な私は値をいきなり30に上げて試したのであるが、とりあえずはうまくいった。最適な値探しはまたヒマな時にでもやろう。

PowerToys *

本家製(だがサポートなし)の便利ユーティリティ。Tweak UIとか(窓の手に類似)。

入手 *

効用 *

ファイルの比較 *

動機 *

外部メディアに書き込んだ際など、「あるディレクトリ中に格納されているファイル(ディレクトリ)群が、他のディレクトリに格納されているものとバイナリレベルで同じか?」と思い、これを調べたくなることがある。

方法 *

全bitを調査すれば完璧にわかるのだが、これだと時間がかかる。同じかそうでないかだけわかればよいなら、MD5なんかのハッシュ値の比較だけを行えば充分。良く知らないが、偶然ハッシュが同じになってしまう確率はとってもとっても小さいのだろう。

専用のツールは恐らく数多くあるのだろうが、本家が配布するFCIVなんてのもあるので、これを使って試してみる。これの機能は

なんてところのようなので、上記の様なデータ比較のために充分な機能がある。

というわけで、こういった既存のコマンドを使うと楽だろうと思ってオプションなどを調べていたが、結局プログラム自作するのが総合的な手間では最適解と思えてきてしまった。まあ折角調べたことなのでメモしておくことにする。

実践 *

C:\mydata\important\{data1.txt, data2.pdf, ...} # 比較元
D:\mportant\{data1.txt, data2.pdf, ...}

なんてのを比較したいとする。パスは通ってるとする

方法1(正統派?) *

fciv.exe c:\mydata\important -bp c:\mydata\important -r -xml my_hash.xml

をまず打つ。これでimportant以下全てのファイルのハッシュがmy_hash.xmlに保存される。ファイルの場所の情報は、(この方法だと)相対パスとなる。この時のコンソールの出力は以下な感じ。

//
// File Checksum Integrity Verifier version 2.05.
//
Start Time: 03/08/2006 at 05h15'28''

Error loading XML document.
Create New XML database

End Time..: 03/08/2006 at 05h15'28''


        Processed 4 directories
        Processed 23 files
Errors have been reported to fciv.err

XMLが無いので新たに作ると言い、時刻をメモし、処理し、エラーをfciv.errに吐いたそうだ。だが実際にはfciv.errにはコマンドラインが書かれているのみだった。「エラーはありません」ということなのだと解釈しておく。ハッシュを見たいのなら

fciv -list -xml my_hash.xml

などとすればリスト表示される。

次に

fciv -v -bp d:\important -xml my_hash.xml

として比較を行う。成功すれば

//
// File Checksum Integrity Verifier version 2.05.
//
Starting checksums verification : 03/08/2006 at 05h23'45

All files verified successfully

End Verification : 03/08/2006 at 05h23'45

となり、失敗すれば

//
// File Checksum Integrity Verifier version 2.05.
//
Starting checksums verification : 03/08/2006 at 05h24'12

List of modified files:
-----------------------
data1.txt
        Hash is         : 81d95db337a18c65384d35ba7ea2efda
        It should be    : ee3d1c92cf3763f8f6550f0b3f3cf01d


End Verification : 03/08/2006 at 05h24'12

となる。パスのオプションをミスると「指定されたパスが見つかりません」と怒濤のように言われる。

あるべきファイルが無い場合には「指定されたパスが見つかりません」と言われるが、余計なファイルが比較先にあっても黙殺されてしまうのがちょっと残念。

fciv -list -xml my_hash.xml
fciv d:\important -r

とか、エクスプローラの右クリックとかでファイル名を数えたりすればOK?なんだかかっこ悪い。

方法2(邪道?) *

fciv.exe c:\mydata\important -bp c:\mydata\important -r -xml my_hash1.xml
fciv.exe d:\important -bp d:\important -r -xml my_hash2.xml

として

fciv.exe my_hash1.xml
fciv.exe my_hash2.xml

の出力を比べるなりdiffするなり(あれば)する。これも何だかかっこ悪い。

まあ、致命的な欠点でもないんだから、妥協しとく。

参考 *

ハッシュ値を利用してファイルの同一性をチェックする

タスクマネージャ *

Windowsが安定するようになってからはお世話になる事は少なくなったものの、重要なプログラムである。

コマンドラインが好き *

Windows標準のコマンド *

findstr *

grepみたいなもん。それほど高機能ではないが充分使える。例えば

findstr /C:"mystring" /INS *.cpp

などとする("mystring"を含むcppファイルを探す)。オプションの意味は下記

C検索する文字列
I大文字小文字の区別をしない
N行番号を出力
Sサブディレクトリも検索
Mファイル名のみ出力

PS *

PowerShellの略。以前までMonadだとかMSHとか言われていたもの。まだ正式版ではないみたいだが、@ITの記事をざっと見ると、パスの区切りがスラッシュでもいいような事が書いてある!これだけで試す価値があるのでちょっと遊んでみることにする。

入手 *

Passportへのレジストが必要のようだ。.NET framework 2.0が必要なようだ。

コマンドプロンプト *

UNIX環境 *

UNIX環境を実現したくばcygwinを使えばいいっちゃいいんだが、大規模すぎるし、UNIXとWindowsではそもそも前提条件が異なるので、何かと例外ルールに惑わされて面倒。本格的にUNIX環境の動作が欲しい時はリモートなりVMWareなり別パーティションなりに環境を用意する方がいいのかなあと考えつつ、まだ何もしていない。

下記は、Windowsのルールに従いつつ、なるべくUNIXライクなコマンドラインのインターフェースを充実させようとする試み関連。

dd *

CD/FDDのイメージを作ったり読んだりするにはddコマンドが便利。cygwin環境には勿論あるが、そうでないWindows用のddコマンドもある。

dd if=\\.\a: of=FloppyImage.img
dd if=\\.\g: of=CDImage.iso

などとしてイメージが作れる。作ったイメージは、Daemon ToolsやらVMWareで活躍する。

which *

whichコマンドは、バッチファイルから実現できる。@IT:Windows TIPS -- Hint:whichコマンドを作る

xxd *

xxdコマンドは、vimに同梱されている。Windowsのコンソール版バイナリだとダウンロードする量も少なくてよい。

UNIXとか関係なしの便利コマンド *

あまり関係ないけど、ext2を読めるカーネルモードドライバを見つけた

CraftLaunch *

キーボード指向のランチャ

あふ *

「超低機能二画面ファイラ」

FD-likeなファイラでは一番好き。

コマンド *

キー定義から好みのプログラム類を起動できる。引数付きでプログラムを起動する際にちょっとつまずいたのでメモ。

バッチファイルならそのまま記述すれば良い。

C:\programs\afx\mybat.bat $P

一方、VBScriptなどではアタマにwscriptをつける必要があるみたい。

wscript C:\programs\afx\myscript.vbs $P

Paper Plane xUI *

こちらもFD-likeファイラ。Unicodeに対応してるのと、D&Dできる点が良い。

素材 *

firefox *

動作も軽快になり、洗練されてきた。

キーバインド *

Ctrl + Tab 次のタブ
Ctrl + Shift + Tab 前のタブ
Ctrl + [1-9] 数字に対応するタブを選択

タブを選択した状態(マウスでタブをクリック、もしくは{URL(Ctrl+L),検索(Ctrl+K)}エディットボックスからTabキーでタブにキーボードフォーカスを移す)なら

Ctrl + -> タブ右移動
Ctrl + <- タブ左移動

効果音 *

ページ内の検索が失敗するとバフッと効果音が鳴るのだが、これがたまらなく鬱陶しい上に、ツール→オプションからこれを解除する方法も見つからず、かなりムカついていた。

どうやらWindows環境だと効果音はデフォルトでONになっているようである。これをOFFにするには、C:\Documents and Settings\(username)\Application Data\Mozilla\Firefox\Profiles\(英数字羅列).default\prefs.js に

user_pref("accessibility.typeaheadfind.enablesound", false);

を加えればよい。


Last-modified: Sat, 16 Sep 2006 18:59:26 JST