2019年7月31日水曜日

fciv(File Checksum Integrity Verifier) は使わない方がいい

環境

  • windows 10 1809 (64bit)
  • fciv 2.05 (互換モードは使用しない)

File Checksum Integrity Verifier ユーティリティの概要と入手方法
https://support.microsoft.com/ja-jp/help/841290/availability-and-description-of-the-file-checksum-integrity-verifier-u

概要

fcivはWindowsでファイルのハッシュ値を計算するためのコマンド。

環境のせいか、動作に怪しいところがある。
Windows XP時代のプログラムのなので、仕方がない気もする。

怪しいのは 「-exc」 オプション。
ヘルプを見ると以下のように書いてある。


-exc file: list of directories that should not be computed.
     

exc はおそらく exclude の略で、ハッシュ値を計算しないファイルを指定するオプション。
これが効かない、というか2バイト文字を含むファイルを弾くだけになってしまう。

サンプル

「Document」 フォルダの中に2つのファイルがあるとする。


>dir Document

2019/07/26  20:19    <DIR>          .
2019/07/26  20:19    <DIR>          ..
2019/07/26  19:33                 6 test.txt
2019/07/26  19:34                 5 テスト.txt

     

まず 何も指定せずにfcivを実行。
2ファイルのハッシュ値が出力されることが確認できる。


>fciv Document
//
// File Checksum Integrity Verifier version 2.05.
//
27c01ca43abd2e05ca08cf95d1a549cd document\test.txt
0cdaa4e38f4475534f739edd5bee4b2c document\テスト.txt
     

次に 「-exc」で テスト.txt 指定して実行すると、 テスト.txtが除外された結果が出力される。
これは上手くいっているように見える。


>fciv Document -exc document\テスト.txt
//
// File Checksum Integrity Verifier version 2.05.
//
27c01ca43abd2e05ca08cf95d1a549cd document\test.txt
     
(※ここでファイル名のみだとエラーになるので、相対パスを指定する。)

>fciv Document -exc テスト.txt
//
// File Checksum Integrity Verifier version 2.05.
//

Error opening Exception file テスト.txt
  Error msg  : 指定されたファイルが見つかりません。
  Error code : 2

27c01ca43abd2e05ca08cf95d1a549cd document\test.txt
0cdaa4e38f4475534f739edd5bee4b2c document\テスト.txt 
      

次に test.txtを指定してみる。
すると結果は上記と同じになってしまい、「-exc」が機能していないように見える。


>fciv Document -exc document\test.txt
//
// File Checksum Integrity Verifier version 2.05.
//
27c01ca43abd2e05ca08cf95d1a549cd document\test.txt
     

上記のような状況なので、Windows 10 で fciv は使わない方がいいと思われる。
ハッシュ値を計算する代替手段としては Powershell の GetHashCode() 等がある。

外部参考サイト