2011-02-11 17 views

Respuesta

10

Puede intentar esto.

FOR /R [directory] %%F IN (*.*) DO IF NOT "%%~xF" == ".[extension]" DEL /F /S "%%F" 

O, si solo tiene un archivo .exe, es aún más simple.

for %i in (*.*) do if not %i == FILE.EXE del %i 
+0

Necesito aprender de las formas más difíciles, también (en realidad, no es tan difícil), así que tienes el marca de verificación. :) – nyuszika7h

+0

Gracias. Comprobé estas dos soluciones en FreeDOS (que se ejecuta en VirtualBox, porque mi PC ejecuta Linux), y la segunda funcionó (pero todavía es para un archivo). Acerca del primero: parece que solo es para Windows 2000 y XP. Más información está disponible aquí: http://www.computerhope.com/forhlp.htm – aruseni

+0

'%% F' solo funciona en archivos por lotes. Intente repararlo con '% F'. – nyuszika7h

3

No hay manera directa, aquí es una manera sin script para hacerlo:

  1. Crear un subdirectorio.
  2. Copiar todo *.exe* archivos al directorio.
  3. Borrar todos los archivos (*.*) en el directorio actual.
  4. Copie todos los archivos en el subdirectorio al directorio actual.
  5. Elimine todos los archivos en el subdirectorio.
  6. Quitar (rmdir) el subdirectorio

Y aquí está el código:

C:\mydir> mkdir temp 
C:\mydir> move *.exe temp 
C:\mydir> del *.* /f /q 
C:\mydir> move temp\*.exe . 
C:\mydir> rmdir temp 
+0

+1, pero ya lo he intentado. – nyuszika7h

+0

si sigue esto y hace 'del *. */F/s', también eliminará los archivos en la temperatura (debido al parámetro/s) – Jcl

+0

Sí, debería ser'/f/q'. – nyuszika7h

2

No sé si esto va a funcionar para usted (depende de si tiene otros archivos de sólo lectura en su directorio), pero esto debería funcionar:

attrib +R *.exe 
del *.* 
attrib -R *.exe 

cuanto a su pregunta, no hay tal cosa como "excluyendo" comodines en Dos de Comandos de falla

+1

¿Qué pasa si ese atributo ya se ha establecido? Ahora borraste el atributo por error. –

+1

justo, como dije, depende del caso específico ... la solución de aruseni es más elegante :-) – Jcl

0

para mejorar la respuesta de la pregunta (estaba a punto de exclusión de comodines): si no se busca una extensión específica, se puede utilizar este ciclo for:

for /F "usebackq" %i IN (`dir /b *^|findstr /i /v <PATTERN>`) DO @echo %i 

reemplazar "eco" con "del" ...

Cuestiones relacionadas