web-dev-qa-db-ja.com

ディレクトリリストに表示されていても、フォルダにアクセス/変更できません

S.W.A.Tというフォルダがあります。おそらくピリオド文字が原因で、アクセスしたり名前を変更したりすることはできません。 Explorerに表示されますが、開こうとするとエラーが発生します。

場所は利用できません

D:\ StockPics\S.W.A.Tは利用できません。このPC上にある場合は、デバイスまたはドライブが接続されているか、ディスクが挿入されていることを確認してから、再試行してください。場所がネットワーク上にある場合は、ネットワークまたはインターネットに接続していることを確認してから、再試行してください。それでも場所が見つからない場合は、移動または削除された可能性があります。

IMG:

フォルダの名前を変更しようとすると、ファイルの拡張子を変更したときに表示されるのと同じ警告が表示されます。名前の変更を続行すると、Windowsはファイルを見つけることができません。

このアイテムが見つかりませんでした

これは、D:\ StockPicsにはもうありません。アイテムの場所を確認して、再試行してください。

IMG:

IMG:

Powershellでも同様のエラーが発生します。フォルダはdirリストに表示されますが、名前を変更しようとしても見つかりません。

PS D:\StockPics> dir
 
    Directory: D:\StockPics
 
Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       27/04/2020     15:45                S.W.A.T.
 
PS D:\StockPics> Rename-Item 'S.W.A.T.' 'SWAT'
 
Rename-Item : Cannot rename because item at 'S.W.A.T.' does not exist.
At line:1 char:1
+ Rename-Item 'S.W.A.T.' 'SWAT'
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [Rename-Item], PSInvalidOperationException
    + FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.RenameItemCommand

IMG:

1
Michael Gossman

Windows APIは、(通常)アイテム名の末尾のドットまたはスペースを処理できないことが判明しました。 APIを使用するユーティリティ(PowershellやExplorerなど)が名前の作成を担当する場合、不正な末尾の文字は自動的に削除されます。

ただし、この制限は、Windowsが無効と見なす名前を自由に作成できるサードパーティソフトウェアには適用されません。作成されると、Windowsユーティリティはそれらのアイテムの操作を実行できなくなります。

2つの回避策があります。

  1. 外部ツールを使用します。たとえば、7Zipには、無効な名前のアイテムに対して操作を実行できるファイルエクスプローラーがあります。

  2. Windowsの拡張長パスモードを使用します。絶対パスの前に\\?\を付けることにより、Windows APIは、特に、末尾にドットまたはスペースが付いたアイテムをサポートします。元の質問のPowershellコマンドは、次のように書き直すと成功します。

PS D:\StockPics> Rename-Item '\\?\D:\StockPics\S.W.A.T.' 'SWAT'
3
Michael Gossman