cmd.exe: “del * .txt” rimuove anche * .txt1 etc [duplicato]


8

Possibile duplicato:
comando dir WinXP: le estensioni 3 e 4 caratteri sono uguali?

Sono stato infastidito da uno strano comportamento di cmd.exe per molto tempo (almeno WinXP e Windows7). Un comando simile del *.txtrimuoverà anche i *.txt1file (qualsiasi numero di caratteri dopo '.txt' lo farà). È un bug noto o cosa?

Risposte:


8

È un po 'conosciuto occasionalmente incontrato?

Una spiegazione del comportamento è qui , completa di una possibile soluzione.

Riepilogo: deriva dal modo in cui NTFS gestisce i nomi di file brevi (8.3), per la compatibilità con elementi meno recenti che non sono in grado di gestire nomi di file lunghi "nuovi". dir /xpuò essere utilizzato per visualizzare il nome file breve, in questo modo:

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

Le estensioni più lunghe di tre caratteri verranno semplicemente troncate per il loro breve nome file; così .txt1, .txtxtxtxt, .txt_file, ecc, tutti diventano .txt.


6

I file con più di 4 lettere nell'estensione (e ovviamente si applicano anche altre regole), ottengono un nome breve, quindi ad esempio "foo.txt1" ha il nome breve "foo ~ 1.txt". DEL(come DIRe probabilmente la maggior parte degli altri cmd.execomandi integrati) funzionerà anche su nomi brevi. Per una discussione su un argomento correlato consultare qui: http://blogs.msdn.com/b/oldnewthing/archive/2005/07/20/440918.aspx


+1 per un link più autorevole del mio.
Jim Davis,

2

Questo sarebbe su un filesystem FAT / VFAT? Se è così, vieni morso dall'hackery usato per rappresentare nomi che non rientrano nello schema 8.3; c'è DIRun'opzione che ti mostra i nomi abbreviati alterati, che iniziano con il nome del file effettivo ma hanno un ~e un numero prima dell'estensione, quindi l'estensione è limitata a 3 caratteri. (Esempio: di C:\Program Filessolito si traduce in C:\PROGRA~1.) Un carattere jolly può corrispondere inaspettatamente a questi nomi. Questo non dovrebbe accadere su NTFS o (penso) su condivisioni di rete. a parte il fatto che DOS non è ancora morto, sembra ...


2

Probabilmente puoi usare il Forfilescomando per una soluzione alternativa

Per esempio.

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

Corrisponde solo ai txtfinali.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.