8

Possible Duplicate:
WinXP dir command: 3 and 4 char extensions are the same?

I have been annoyed by a strange behavior of cmd.exe for a long time (at least WinXP and Windows7). A command like del *.txt will also remove *.txt1 files (any number of characters after '.txt' will do). Is this a well known bug or what?

0

4 Answers 4

8

It's an occasionally-encountered somewhat-known?

An explanation of the behavior is here, complete with a possible work-around.

Summary: It comes from the way NTFS handles short (8.3) filenames, for compatibility with older stuff that can't handle "new-fangled" long filenames. dir /x can be used to view the short filename, like so:

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
 ...

Extensions longer than three characters will simply be truncated for their short filename; so .txt1, .txtxtxtxt, .txt_file, etc, all become .txt.

0
6

Files with more than 4 letters in the extension (and other rules of course also apply), get a short name, so for example "foo.txt1" has the shortname "foo~1.txt". DEL (like DIR and possibly most other cmd.exe builtin commands) will also operate on shortnames. For a discussion on a related topic see here: http://blogs.msdn.com/b/oldnewthing/archive/2005/07/20/440918.aspx

1
  • +1 for a more authoritative link than mine.
    – Jim Davis
    Jul 4, 2011 at 5:39
2

Would this be on a FAT/VFAT filesystem? If so, you're getting bitten by the hackery used to represent names that don't fit into the 8.3 schema; there's a DIR option that shows you the mangled short names, which will begin with the actual file name but have a ~ and a number before the extension, then the extension is capped at 3 characters. (Example: C:\Program Files usually translates to C:\PROGRA~1.) A wildcard may unexpectedly match these names. This should not happen on NTFS or (I think) on network shares. except that DOS still hasn't died, it seems....

2

You can probably use Forfiles command for a workaround

Eg.

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

Matches only txt endings.

Not the answer you're looking for? Browse other questions tagged or ask your own question.