Windowsで大文字小文字を区別してファイルを扱う方法


普段、WindowsPC上でWSLやVM wareを使用してLinux用のソフトウェアを開発しているのですが、しょうもないところでハマってしまい、イイやり方の記事があまり見つからなかったのでメモに残しておきます。

Windowsではファイル名の大文字と小文字は区別"しなかった”

Windowsユーザーとしては当たり前といえば当たり前の話で、ファイル名の大文字と小文字は区別しないファイルシステムになっています。
例えば、下記2つのファイルはWindows上では区別してもらません。

  • aaa.txt
  • AAA.txt

もし"aaa.txt"があるところに、まったく違う内容の"AAA.txt"というファイルをコピーしてしまうと、"AAA.txt"が"aaa.txt"として上書きされるのが仕様です。
つまり、Linux環境下で作ったファイルで"aaa.txt"と"AAA.txt"という全く異なる用途のファイルを同一ディレクトリに保存していた場合、これをWindows環境に持ってくるとどちらか一方が上書きされてしまいます・・・

従来のWindowsでは上記の動作が仕様だったわけですが、
Windows10では、WSL (Windows Subsystem for Linux)などLinux環境と連携しやすいようになってきたため、Windows上でも小文字と大文字を区別できるようにする技があるようです。

大文字と小文字を区別するように一括変更するコマンド

fsutil.exeを使って、フォルダ単位で大文字と小文字を区別できるように指定できます。
が、フォルダ単位というのがクセ物で、いちいちフォルダ毎にちまちま設定しなければいけないため、再帰的に設定するコマンドが下記です。

cd "設定を変更したいフォルダ"
for /R /d %a in (*) do fsutil.exe file SetCaseSensitiveInfo %a enable

これでフォルダ以下すべてのフォルダを大文字と小文字を区別してファイルを扱えるようになります。