web-dev-qa-db-ja.com

不正なファイル名のファイル

重複の可能性:
Windows XPに特殊文字でファイルの名前を変更させる方法

名前に「?」などの文字が含まれるファイルがいくつかあります。および「:」は、Windowsで禁止されています。これらの名前のファイルを手動で作成できないため、どのようにしてこれらの名前でそこにたどり着いたのかわかりません。それらはHFSドライブから回復されますが、それらを回復したツールはWindowsで実行されていたため、作成時に同じ制限を受ける必要があったと思います。

とにかく...ここにあるので、開くことはできますが、移動、コピー、名前の変更、または削除することはできません。それらのいくつかを削除したいのですが、ほとんどは保存して別のドライブにコピーしたいと思います。どうすればこれを行うことができますか?

2
Josh

NTFSファイルシステムボリューム上のファイルまたはフォルダを削除することはできません

原因5:ファイル名にWin32名前空間の予約名が含まれているファイル名に予約名(「lpt1」など)が含まれている場合Win32ネームスペースでは、ファイルを削除できない場合があります。この問題を解決するには、Win32以外のプログラムを使用してファイルの名前を変更します。 POSIXツール、または適切な内部構文を使用するその他のツールを使用してファイルを使用できます。

さらに、特定の構文を使用してファイルのパスを指定する場合は、いくつかの組み込みコマンドを使用して、通常のWin32予約名チェックをバイパスできる場合があります。たとえば、Windows XPでDelコマンドを使用する場合、次の特別な構文を使用してファイルのフルパスを指定すると、「lpt1」という名前のファイルを削除できます。

del \\?\c:\path_to_file\lpt1

WindowsNTおよびWindows2000で予約された名前のファイルを削除する方法の詳細については、次の記事番号をクリックして、マイクロソフトサポート技術情報の記事を参照してください。

120716 Windowsで予約名のファイルを削除する方法

Windows XPで予約された名前のファイルを削除する方法の詳細については、次の記事番号をクリックして、マイクロソフトサポート技術情報の記事を参照してください。

15226 WindowsXPで予約名のファイルを削除する方法

一般的なWin32CreateFileメカニズムを使用してファイルへのハンドルを開くと、特定のファイル名が古いスタイルのDOSデバイス用に予約されます。下位互換性のために、これらのファイル名は許可されておらず、通常のWin32ファイル呼び出しを使用して作成することはできません。ただし、この問題はNTFSの制限ではありません。

Win32プログラムを使用して、MAX_PATHよりも深いフォルダーをトラバースするために使用するのと同じ手法を使用して、ファイルの作成(または削除)時に実行される一般的な名前チェックをバイパスできる場合があります。さらに、一部のPOSIXツールはこれらの名前チェックの対象ではありません。

原因6:ファイル名にWin32ネームスペースに無効な名前が含まれているファイル名に無効な名前が含まれている場合、ファイルを削除できない場合があります(たとえば、ファイル名に末尾のスペースまたは末尾のピリオドがある場合、またはファイル名がスペースのみで構成されている場合)。この問題を解決するには、適切な内部構文を使用してファイルを削除するツールを使用します。これらのファイルを操作するために、いくつかのツールで「\?\」構文を使用できます。次に例を示します。

del "\\?\c:\path_to_file_that contains a trailing space.txt "

この問題の原因は原因4と同様です。ただし、通常のWin32構文を使用して、名前に末尾のスペースまたは末尾のピリオドが含まれるファイルを開くと、実際のファイルを開く前に末尾のスペースまたはピリオドが削除されます。したがって、「AFile.txt」と「AFile.txt」という名前の同じフォルダーに2つのファイルがある場合(ファイル名の後のスペースに注意)、標準のWin32呼び出しを使用して2番目のファイルを開こうとすると、代わりに最初のファイル。同様に、名前が「」(スペース文字)だけのファイルがあり、標準のWin32呼び出しを使用してファイルを開こうとすると、代わりにファイルの親フォルダーを開きます。この状況で、これらのファイルのセキュリティ設定を変更しようとすると、これを実行できないか、別のファイルの設定を予期せず変更する可能性があります。この動作が発生した場合、実際には制限付きACLを持つファイルへのアクセス許可があると思われるかもしれません。

5
Molly7244

私の答え から 同様の質問

フェイルセーフメソッド

LinuxLiveCDを起動します。 Ubuntuは優れたNTFSサポートを備えており、LinuxはWindowsよりもはるかに多くのファイル名の不安定な文字を処理します。 Perlの名前変更スクリプト は、システムのrenameコマンドとして含めることができます。これは、多くの同様の名前のファイルをバッチ変更するのに便利です。


短いファイル名のWindowsコマンドシェル

DOSコマンドDIR/Xは、短いファイル名がシステムに存在する場合を表示します。

$ cmd
c:\test> dir /x
 Volume in drive E is NUVOL
 Volume Serial Number is 80D3-A96D

 Directory of e:\tor\test

10/04/2009  05:15 AM    <DIR>                       .
10/04/2009  05:15 AM    <DIR>                       ..
10/04/2009  05:11 AM                 0 CLIP-2~1.MOV clip-2009-10-01 21;26;00.mov
               1 File(s)              0 bytes
               2 Dir(s)   5,201,670,144 bytes free

それらが存在する場合、RENコマンドはそれらを新しい名前に移動します。新しい名前は、新しい(有効な)長いファイル名にすることができます。

c:\test> ren CLIP-2~1.MOV "clip-2009-10-01_21-26-00.mov"

それが1つを修正する方法です。

それらすべてをバッチ処理するには、1)移動するすべてのファイルの短いファイル名を取得する必要があります。 2)適切なRENコマンドを使用してリストをバッチファイルに変換します。 3)結果のバッチスクリプトを実行します。 Perl(またはsed/awk、pythonなど)に慣れている場合は、これを自分でスクリプト化するか、手順1で作成したリストから手動で作成することができます。

ただし、DIR/Xに短いファイル名が表示されない場合は、システムで短いファイル名が無効になっているため、このソリューションは役に立ちません。

2
quack quixote

Idigasの提案が機能しない場合は、 bunt などのLinuxLiveCDを使用していつでも移動できます。ファイル名に疑問符とコロンを含めることができるため、ファイルの処理に問題はありません。

最初にドライブをマウントする必要があります。 XPがディスクにインストールされている唯一のオペレーティングシステムである場合、SCSIドライブであるかIDEであるかに応じて、おそらく/dev/sda1または/dev/hda1からマウントできます。ドライブ。

sCSIドライブをマウントするには(NTFSを実行している場合):

マウント-tntfs-3g/dev/sda1/mnt

IDEドライブをマウントするには(NTFSを実行):

マウント-tntfs-3f/dev/hda1/mnt

FAT32ボリュームの場合は、タイプとしてvfatを使用できます(-t vfat

0
John T

Delete Doctor (フリーウェア)または delinvfiles (シェアウェアですが、より多くの機能があります)を試して、短い名前またはUNC名のファイルを削除してください

0
fluxtendu

私は過去にWindows Services for Unix を使用してこれらの種類のファイルを削除しました。

このようなファイルを作成できる理由は、WindowsがPOSIXをサポートしているため、NTFSはPOSIXファイルシステムのすべての機能をサポートできるように設計されているためです。ただし、通常のWindowsAPIを使用している通常のWin32/Win64プログラムは、これらの機能にアクセスできません。このようなファイルを作成または削除するには、ネイティブAPIまたはPOSIXAPIに記述されたプログラムを使用する必要があります。

0
dsolimano