forコマンドの変数で参照できるファイルの属性について
たぶんWindows 2000からだと思うけど、forコマンドの変数に修飾子をつけることで、ファイルの属性がわかる。例えば変数名が%I
の場合、%~aI
のようにする。
でも、このとき%~aI
がどのように展開されるのかについては、マイクロソフトは文書化してないようだ。そこで、次のOSで実際に試してみた。
- Windows XP Home Edition (SP2)
- Windows XP Professional (SP2)
結果はこうなった。
C:> dir /a ドライブ C のボリューム ラベルは ABADCAFE です ボリューム シリアル番号は CAFE-BABE です C:\Documents and Settings\DEADBEEF\My Documents のディレクトリ 2006/05/21 (日) 00:00 <DIR> . 2006/05/21 (日) 00:00 <DIR> .. 2006/05/21 (日) 00:00 <JUNCTION> alias 2006/05/21 (日) 00:00 0 archive 2006/05/21 (日) 00:00 0 compressed 2006/05/21 (日) 00:00 <DIR> directory 2006/05/21 (日) 00:00 0 hidden 2006/05/21 (日) 00:00 0 readonly 2006/05/21 (日) 00:00 0 system 5 個のファイル 0 バイト 4 個のディレクトリ 1,234,567,890 バイトの空き領域 C:> for %F in (directory readonly archive hidden system compressed alias) do @echo %~aF %F d-------- directory -r------- readonly --a------ archive ---h----- hidden ----s---- system -----c--- compressed d-------l alias C:>
つまり、こういうことのようだ。
位置 | 文字 | 意味 |
---|---|---|
1 | d | ディレクトリ |
2 | r | 読み取り専用 |
3 | a | アーカイブ |
4 | h | 隠しファイル |
5 | s | システムファイル |
6 | c | 圧縮 |
7 | ? | (不明) |
8 | ? | (不明) |
9 | l | リパースポイント |
リパースポイントとは、マウントポイントや接合点(ジャンクション)などのことを言う…ハズ。mountvolコマンドやjunctionコマンドなどで作成できる。詳しくはよく知らない。
7文字目と8文字目については、常に-だった。暗号化やスパースファイルを試したが変化せず、NULなどのデバイス名や\\?\Volume{abadcafe-cafe-babe-dead-beef00031337}\といったボリューム名ではそもそも展開すらされなかった。
困ったのでぐぐってみたが、あんまりいいものはなかった。
もしかしたら、7文字目と8文字目は将来のために予約してるのかもしれない。謎である。