Eh bien, dans votre cas, vous pouvez probablement utiliser forfiles
:
> forfiles /m *.pyc
"file1.pyc"
il ne respecte pas les règles de cmd d'extension génériques.
Vous pouvez également énumérer tous les fichiers et filtre pour l'extension après:
> for %i in (*) do @if %~xi==.pyc @echo %i
file1.pyc
Les deux méthodes sauter les fichiers où seule la partie .3 des matchs d'extension.
Vous pouvez utiliser
forfiles /m *.pyc /c del @FILE
ou
for %i in (*) do @if %~xi==.pyc @del "%i"
Il est vrai que, un peu plus complexe qu'un del *.pyc
simple, cependant.
ETA: Comme quelqu'un était sceptique si cela fonctionnerait, un petit extrait d'une session cmd sur un Win XP SP 2 VM:
S:\Temp>for %i in (file1.py,file1.pyc,file2.pycstlongname,file2.pycstlongnamec) do @copy nul %i
1 Datei(en) kopiert.
1 Datei(en) kopiert.
1 Datei(en) kopiert.
1 Datei(en) kopiert.
S:\Temp>dir /b
file1.py
file1.pyc
file2.pycstlongname
file2.pycstlongnamec
S:\Temp>del *.pyc
S:\Temp>dir /b
file1.py
S:\Temp>del *
S:\Temp>for %i in (file1.py,file1.pyc,file2.pycstlongname,file2.pycstlongnamec) do @copy nul %i
1 Datei(en) kopiert.
1 Datei(en) kopiert.
1 Datei(en) kopiert.
1 Datei(en) kopiert.
S:\Temp>for %i in (*) do @if %~xi==.pyc @del "%i"
S:\Temp>dir /b
file1.py
file2.pycstlongname
file2.pycstlongnamec
Nevermind the Les messages allemands, je l'espère, il montre que ci-dessus méthode fonctionne en effet.
Pour expliquer un peu pourquoi cela fonctionne, nous pouvons jeter un oeil à la commande:
for %i in (*) do @if %~xi==.pyc @del "%i"
La première partie est trivial. for %i in (*)
énumère simplement tous les fichiers dans le répertoire en cours. Nous vérifions ensuite l'extension; %~xi
étend à la pleine extension (pas 8.3 choses), en cours d'exécution ainsi au-dessus la ligne entraînera les commandes suivantes à exécuter:
if .py == .pyc del "file1.py"
if .pyc == .pyc del "file1.pyc"
if .pycstlongname == .pyc del "file2.pycstlongname"
if .pycstlongnamec == .pyc del "file2.pycstlongnamec"
J'espère qu'il est évident pourquoi cela fonctionne mieux que le globbing fait par cmd qui comprend 8.3 des noms. Pas de jokers ici, rien à faire de mal.
La variante forfiles
fonctionne sur mes machines Win 7 et Vista ici. Je ne peux que deviner mais je suspecte fortement, forfiles n'implémente pas les mêmes règles de correspondance génériques que cmd. Puisque nous sommes sur Windows, chaque programme développe des jokers pour lui-même. C'est pas fait par le shell, contrairement aux systèmes UNIX. Comment exactement les programmes font cela diffère parfois et apparemment, il le fait ici aussi. Inutile de dire que je considère l'approche de forfiles
ici un peu plus raisonnable car les noms de 8.3 devraient mourir d'une mort horrible bientôt. Ou du moins j'espère qu'ils le feront.
C'est pourquoi j'ai pris l'habitude depuis longtemps d'épeler DEL comme DIR et d'examiner les résultats ... mais cela n'aide pas un fichier BAT. – RBerteig