ファイル名の最後が"."とか" "とかだとExplorerから削除ができなくなる.そもそもこういうパスをWindows shellはサポートしておらず,このようなパスを渡すと正規化されて削除されてしまう.
D:\Temp>type nul > foo.txt. D:\Temp>dir 2009/11/23 11:20 <DIR> . 2009/11/23 11:20 <DIR> .. 2009/11/23 11:19 0 foo.txt D:\Temp>del foo.txt D:\Temp>dir 2009/11/23 11:20 <DIR> . 2009/11/23 11:20 <DIR> ..
そこで,"\\?\"をprefixとして絶対パスで指定すると,引数のパスに対して正規化せずに処理してくれるため削除することが可能になる.
D:\Temp>type nul > "\\?\D:\Temp\foo." D:\Temp>type nul > "\\?\D:\Temp\foo " D:\Temp>dir 2009/11/23 11:20 <DIR> . 2009/11/23 11:20 <DIR> .. 2009/11/23 11:19 0 foo 2009/11/23 11:19 0 foo. D:\Temp>del foo. ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています。 D:\Temp>del foo. ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています。 D:\Temp>del "\\?\D:\Temp\foo." D:\Temp>del "\\?\D:\Temp\foo " D:\Temp>dir 2009/11/23 11:20 <DIR> . 2009/11/23 11:20 <DIR> .. D:\Temp>
参考