Windowsコマンド(fsutil file setCaseSensitiveInfo)


アニメ『約束のネバーランド』

ジャンプ漫画ってことは知ってましたが、読んだことありません。内容を知らずにアニメ1話に挑みました。どうせジャンプなんだろうなあ、と考えていたので、子供たちが訓練されて超人になって、特殊能力なんてみについて、バトルが始まるに違いないと思ってたのですが、1話の最後に驚愕。マジっすか。これはまとめて視聴せねば、と録画を貯めてる最中です。

今回は、setCaseSensitiveInfoで設定を変更して、大文字小文字区別のファイル名が使えるか試してみます。
今フォルダの中には、前回作ったファイルが1つある状態です。

C:\Users\takk2\tmp>dir
 ドライブ C のボリューム ラベルがありません。
 ボリューム シリアル番号は 6C92-6118 です

 C:\Users\takk2\tmp のディレクトリ

2019/02/17  21:29    <DIR>          .
2019/02/17  21:29    <DIR>          ..
2019/02/17  23:08                28 test.txt
               1 個のファイル                  28 バイト
               2 個のディレクトリ  197,078,609,920 バイトの空き領域

C:\Users\takk2\tmp>

中身は変わってませんね。

C:\Users\takk2\tmp>type test.txt
 B D F H J L N P R T V X Z

C:\Users\takk2\tmp>

ファイル名が大文字、小文字区別されているか、copyコマンドで確認してみましょう。
区別されていたら、コピーが成功するはずです。

C:\Users\takk2\tmp>copy test.txt TEST.TXT
ファイルを同じファイルにコピーすることはできません。
        0 個のファイルをコピーしました。

C:\Users\takk2\tmp>

コピーできませんね。ってことは、大文字、小文字の区別はされてません。

CaseSensitiveInfoの状態を、確認するコマンドもあるので、使ってみましょう。

C:\Users\takk2\tmp>fsutil file querycasesensitiveinfo .
ディレクトリ C:\Users\takk2\tmp の大文字と小文字を区別する属性が無効になっています。

C:\Users\takk2\tmp>

属性が無効になっている、つまり大文字小文字は区別されていないですね。

では、設定変更してみます。

C:\Users\takk2\tmp>fsutil file setcasesensitiveinfo . enable
エラー:  この要求はサポートされていません。

C:\Users\takk2\tmp>

なぬ? 変更できないようです。

管理者権限で起動したcmd上で再度確認してみます。

C:\Users\takk2\tmp>fsutil file setcasesensitiveinfo . enable
エラー:  この要求はサポートされていません。

C:\Users\takk2\tmp>

結果は、同じでした。

disableの方は、設定できるでしょうか。

C:\Users\takk2\tmp>fsutil file setcasesensitiveinfo . disable
ディレクトリ C:\Users\takk2\tmp の大文字と小文字を区別する属性が無効になっています。

C:\Users\takk2\tmp>

実行できました。まあ、設定の変化はないですが。
ちなみに、これは管理者権限なしのcmd上でも実行できました。

Windowsの機能の有効化または無効化
Windows Subsystem for Linuxにチェックをいれてみます。

C:\Users\takk2\tmp>fsutil file setcasesensitiveinfo . enable
ディレクトリ C:\Users\takk2\tmp の大文字と小文字を区別する属性が有効になっています。

C:\Users\takk2\tmp>

実行できました。WSLさえ有効になっていれば、管理者権限でcmdを起動する必要もありませんでした。

では、もう一度、以下のファイルを大文字のファイルにコピーしたいと思います。

C:\Users\takk2\tmp>dir
 ドライブ C のボリューム ラベルがありません。
 ボリューム シリアル番号は 6C92-6118 です

 C:\Users\takk2\tmp のディレクトリ

2019/02/22  19:50    <DIR>          .
2019/02/22  19:50    <DIR>          ..
2019/02/17  23:08                28 test.txt
               1 個のファイル                  28 バイト
               2 個のディレクトリ  197,132,017,664 バイトの空き領域

C:\Users\takk2\tmp>

コピーコマンド。

C:\Users\takk2\tmp>copy test.txt TEST.TXT
ファイルを同じファイルにコピーすることはできません。
        0 個のファイルをコピーしました。

C:\Users\takk2\tmp>

結局できないんですね。

では、wslを使ったコピーではどうか。

C:\Users\takk2\tmp>wsl cp test.txt TEST.TXT

C:\Users\takk2\tmp>

できました。

ファイルを確認してみます。

C:\Users\takk2\tmp>dir
 ドライブ C のボリューム ラベルがありません。
 ボリューム シリアル番号は 6C92-6118 です

 C:\Users\takk2\tmp のディレクトリ

2019/02/22  20:24    <DIR>          .
2019/02/22  20:24    <DIR>          ..
2019/02/22  20:24                28 TEST.TXT
2019/02/17  23:08                28 test.txt
               2 個のファイル                  56 バイト
               2 個のディレクトリ  197,514,973,184 バイトの空き領域

C:\Users\takk2\tmp>

つまり、copyコマンドではじかれるってことなんでしょうか。
powershellでも試してみます。

C:\Users\takk2\tmp>powershell
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

PS C:\Users\takk2\tmp> cp test.txt Test.txt
cp : 項目 C:\Users\takk2\tmp\test.txt をそれ自体で上書きすることはできません。
発生場所 行:1 文字:1
+ cp test.txt Test.txt
+ ~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : WriteError: (C:\Users\takk2\tmp\test.txt:String) [Copy-Item], IOException
    + FullyQualifiedErrorId : CopyError,Microsoft.PowerShell.Commands.CopyItemCommand

PS C:\Users\takk2\tmp>

こちらも実行できませんでした。
fsutil file SetCaseSensitiveInfoコマンドは、wslのためだけにあるのでしょうか。まあ、そのあたりは謎のままですが、使い方は分りました。

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA