「無効な MS-DOS ファンクションです。」と表示されたファイルを削除する

 cygwinを使って作業をしていたら、いつのまにか "NUL" ファイルなるものが生成されていることに気づいた。BunBackup を使って "NUL" ファイルを含むフォルダをバックアップしようとすると、必ずエラーが生じることが分かったのだ。このファイルを削除し終えるまでに私が行った試行錯誤の経緯を書き残しておきたい。


 私が直面した事象を簡単に整理しよう。"NUL" ファイルをエクスプローラー上から削除しようとすると、管理者権限を要求されるのみならず、「対象のファイルシステムに入りません」というメッセージが表示されてしまう。また、ファイルを含むフォルダを削除しようとすると「無効な MS-DOS ファンクションです。」という警告らしきものが表示されて、削除処理が失敗に帰したのであった。管理者権限でコマンドプロンプトを起動し、そのファイルを DEL コマンドで削除しようとしたが、やはり失敗した。
f:id:blechmusik2:20141202002347p:plain
f:id:blechmusik2:20141202002353p:plain
 そこでまず「対象のファイルシステムに入りません」というフレーズをインターネット上で探すと、このフレーズはドライブをまたぐファイルの移動の際に表示されることが分かる。ファイルの移動先にファイルを移動する分のスペースが確保されていない場合に、このエラーメッセージが表示されるようである。
 「対象のファイルシステムに入りません」というフレーズに関係する情報は、今回の "NUL" なるファイルの削除方法を知る手がかりを得ることはできなかった。
 次に「無効な MS-DOS ファンクションです。」というフレーズについて調べた。これらのページからは問題の解決に直接つながる情報を得ることができなかった。

 続けて「無効な MS-DOS ファンクションです。」と「cygwin」の二つのフレーズを検索した。すると、いくつか気になる情報が見つかった。「無効な MS-DOS ファンクションです。」というメッセージはcygwin全体を削除しようとする人々が屢々出くわす症状らしい。私はcygwinのインストール先以外のフォルダで作業をしていたのでcygwinに何かしら起因する問題と断定していなかったが、どうやら cygwin に関連して生じる現象とみてよいだ。

 削除方法はどうやら cygwin で行うものとコマンド・プロンプトを利用するものの二種類があるようだ。
 私はコマンド・プロンプトを使って "NUL" ファイルを削除した。削除したい "NUL" ファイルが d:\path\to\NUL にあるとして、コマンド・プロンプトを管理者権限で起動し、以下のようにコマンドを入力した。

del \\.\D:\path\to\NUL

 これで "NUL" ファイルを無事削除できた。


 ここで気になったのは del \\.\ という表記方法だ。del コマンドのヘルプを見ても "\\.\" が何なのかは分からなかった。もしも "\\.\" がdel コマンドのスイッチであれば / から始まる文字列のはずである。"\\.\" はdel コマンドのスイッチでなければ一体何なのだろうか。
 "\\.\" という表記の意味については以下のページの説明を読んで理解することができた。それはWindows用語集 - UNC:ITproによるパス表記の冒頭部分のようだ。


 こうして削除処理は無事完了した。どのような場合に "NUL" ファイルが作成されてしまうかは分からないが、再度同様の現象が生じたとしても、このような削除方法が分かれば次は滞りなく "NUL" ファイルを削除できるに違いない。