これ以上簡潔なタイトルが思い浮かばなかった自分に落胆…orz
起きたこと
あるバッチプログラムが出力するファイルの名前に含まれる小文字を、
大文字に変えて出力するようにバッチプログラムを変更したのに、
なぜかファイル名が変わらなかった。
分かったこと
- 小文字ファイル名のファイルに対し、大文字ファイル名の同名ファイルで上書きすると、ファイル名は元の小文字のまま。
- 逆も同じ。(小文字⇒大文字 で 大文字のまま)
rem 小文字ファイル名の「aaa.txt」を作成
c:\temp>echo "before" > aaa.txt
rem 小文字ファイル名の「bbb.txt」を作成
c:\temp>echo "after" > bbb.txt
rem 確認
c:\temp>dir
ドライブ C のボリューム ラベルは Windows です
ボリューム シリアル番号は 3C7A-85EC です
c:\temp のディレクトリ
2019/04/01 23:19 <DIR> .
2019/04/01 23:19 <DIR> ..
2019/04/01 23:19 11 aaa.txt
2019/04/01 23:19 10 bbb.txt
2 個のファイル 21 バイト
2 個のディレクトリ 169,053,376,512 バイトの空き領域
rem 「bbb.txt」を大文字ファイル名の「AAA.txt」としてコピー(上書き)
c:\temp>copy bbb.txt AAA.txt
AAA.txt を上書きしますか? (Yes/No/All): yes
1 個のファイルをコピーしました。
rem 上書きしたのに「aaa.txt」のままだった
c:\temp>dir
ドライブ C のボリューム ラベルは Windows です
ボリューム シリアル番号は 3C7A-85EC です
c:\temp のディレクトリ
2019/04/01 23:19 <DIR> .
2019/04/01 23:19 <DIR> ..
2019/04/01 23:19 10 aaa.txt
2019/04/01 23:19 10 bbb.txt
2 個のファイル 20 バイト
2 個のディレクトリ 169,078,181,888 バイトの空き領域
rem 念のため上書きされた「aaa.txt」の中身を確認
c:\temp>type aaa.txt
"after"
rem そもそもコマンドプロンプトでは大文字がすべて小文字に見えるだけかもしれないので
rem 念のため大文字ファイル名のファイルを作成
c:\temp>echo "uppercase" > CCC.txt
rem 確認…ちゃんと大文字「CCC.txt」だった
c:\temp>dir
ドライブ C のボリューム ラベルは Windows です
ボリューム シリアル番号は 3C7A-85EC です
c:\temp のディレクトリ
2019/04/01 23:21 <DIR> .
2019/04/01 23:21 <DIR> ..
2019/04/01 23:19 10 aaa.txt
2019/04/01 23:19 10 bbb.txt
2019/04/01 23:21 14 CCC.txt
3 個のファイル 34 バイト
2 個のディレクトリ 168,992,673,792 バイトの空き領域
Windowsでファイル名が大文字と小文字を区別しないのは知っていたのですが、
上書きされてもファイル名がキープされるのは知りませんでした。常識ですかね…?