cmd.exe:「del * .txt」は、*。txt1なども削除します[重複]


8

可能性のある重複:
WinXP dirコマンド:3と4文字の拡張子は同じですか?

私は長い間(少なくともWinXPとWindows7)cmd.exeの奇妙な動作に悩まされてきました。のようなコマンドdel *.txt*.txt1ファイルを削除します( '.txt'の後の任意の数の文字が削除されます)。これはよく知られたバグですか?

回答:


8

それはたまに出会う、幾分知られていますか?

動作の説明はここにあり、可能な回避を完備しています。

概要:これは、NTFSが短い(8.3)ファイル名を処理する方法に由来します。これは、「複雑な」長いファイル名を処理できない古いものとの互換性のためです。 dir /x次のように、短いファイル名を表示するために使用できます。

C:\>dir /x *~*
 ...
02/25/2011  08:18 AM    <DIR>          DOCUME~1     Documents and Settings
05/28/2011  12:02 AM    <DIR>          PROGRA~1     Program Files
 ...

3文字より長い拡張子は、短いファイル名では単に切り捨てられます。そう.txt1.txtxtxtxt.txt_file、など、すべてになります.txt


6

拡張子が4文字を超えるファイル(もちろん他のルールも適用されます)は、短い名前を取得します。たとえば、「foo.txt1」は「foo〜1.txt」という短い名前になります。DELDIRそしておそらく他のほとんどのcmd.exe組み込みコマンドのように)もショートネームで動作します。関連トピックのディスカッションについては、こちらをご覧ください:http : //blogs.msdn.com/b/oldnewthing/archive/2005/07/20/440918.aspx


自分よりも信頼できるリンクの+1。
ジムデイビス

2

これはFAT / VFATファイルシステムにありますか?もしそうなら、8.3スキーマに適合しない名前を表すために使用されるハッカーに噛まれることになります。DIRマングルされた短い名前を表示するオプションがあります。これは、実際のファイル名で始まりますが~、拡張子の前にa と数字があり、拡張子は3文字で制限されます。(例: C:\Program Files通常はに変換されC:\PROGRA~1ます。)ワイルドカードは、これらの名前に予期せず一致する場合があります。 これは、NTFSまたは(おそらく)ネットワーク共有で発生しません。DOSがまだ死んでいないことを除いて、それはそうです...


2

おそらくForfiles回避策としてコマンドを使用できます

例えば。

Forfiles  -s -m *.txt -c "cmd /C del /q @path"

末尾のみに一致しtxtます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.