NUL (空のファイル) - DOS/コマンドプロンプト コマンド一覧
MS-DOSやWindowsにおける「NUL」はデバイスファイル名の一種で、中身のないファイルを表します。「NUL」からデータを読み込んでも0バイトでEOFとなり、データを書き込んでも何も起こりません(書き込み自体は成功します)。
Linux系における「/dev/null」に概ね一致します。
解説
「デバイスファイル」はファイル入出力において通常のファイルのように用いることができる性質のある仮想ファイルであり、通常はファイル名を指定すべき場所に「NUL」と指定すると、「サイズ 0 のデータを読み込む」または「何のデータも残さずに出力が成功する」といった効果を得ることができます。
なお、「NUL ファイル」はディレクトリに関係なく存在すると見なされます。そのため、「<any-path>\NUL」というファイルは、<any-path> が存在する有効なディレクトリであった場合に存在するファイルとなり、ファイルのオープン及び読み書きを行うことができます(パスを指定しなかった場合と同様、読み込んでも0バイトとなり、書き込んでも何も起こりません)。
※ 他のデバイスファイルも同様ですが、「NUL」はシステムによって予約された名前であり、ファイル名・ディレクトリ名として「NUL」を用いることはできません。
※ [Windows NT系] 「if exist <any-path>\NUL ...」と記述すると、「<any-path>」が存在するときに「...」の部分が実行されますが、「if exist "<any-path>\NUL" ...」と「" "」で括った場合はファイルが存在すると見なされず、「...」の箇所が実行されません。そのため、「<any-path>\NUL」による「<any-path>」の存在確認は「<any-path>」にスペース文字が含まれるとき使うことができませんのでご注意ください。(Windows NT系では「if exist」自体がディレクトリの存在確認に対応しています。)
例
サンプル1
type NUL > null.txt
「データを読み込んでも0バイトでEOFとなる」性質を用い、Typeコマンドを利用して0バイトのファイル「null.txt」を作成します。
サンプル2
copy NUL null.txt
[Windows NT/XP以降] Copyコマンドを利用して0バイトのファイル「null.txt」を作成します。([MS-DOS, Windows 95/98/Me] 0バイトのファイルをコピーすることが出来ないため、このコマンドは利用できません。)
サンプル3 (バッチファイル)
:CheckDrive echo ディスクをドライブAに挿入し、準備が出来たら何かキーを押してください... pause > NUL if not exist A:\NUL goto CheckDrive main.exe A:\
3行目では「データを書き込んでも何も起こらない」性質を用い、Pauseで出力される「続行するには何かキーを押してください . . .」のメッセージを「NUL」に書き込むことで、画面上にはあたかも何も出力されていないかのように見せることができます。
4行目では「NULファイルはディレクトリに関係なく存在する」という性質を用い、Aドライブのルートディレクトリが存在する(=Aドライブにディスクが存在する)かどうかを確認しています。ドライブ自体が存在していても、ディスクが入っていない場合はディレクトリが存在しないものとされます。
※ 場合によっては、4行目実行時にディスクが入っていない際に、システムが「ディスクが挿入されていません」エラーと選択肢を表示する場合があります。