2011-07-18 15 views
7

decir que tengo los siguientes archivos en un directoriode archivos por lotes para un bucle sobre una lista de extensiones de archivo con exclusiones

  • /file.js
  • /file2.min.js
  • /file1.js

¿Cómo puedo escribir un lote de bucle de tal manera que todos los archivos "js" se recogen, pero ".min.js" no son y la salida del nombre de archivo .js se puede cambiar para anexar .min. js

por ejemplo:

for %%A IN (*.js) DO @echo %%A "->" %%~nA ".min.js" 

lo ideal sería producir el siguiente, y tenga en cuenta los file2.min.js no se muestra a la izquierda.

  • file.js -> file.min.js
  • file1.js -> file1.min.js

Gracias por su ayuda.

Respuesta

10

Basta con mirar si ya contiene .min.js:

setlocal enabledelayedexpansion 
for %%f in (*.js) do (
    set "N=%%f" 
    if "!N:.min.js=!"=="!N!" echo %%f -^> %%~nf.min.js 
) 
+1

Fantástico ... funcionó una delicia, gracias! – Lukie

0

En el pasado, cuando quería hacer algo similar, usé el script renamex. Aquí está con ejemplos:

 Usage: renamex [OPTIONS] EXTENSION1 EXTENSION2 

Renames a set of files ending with EXTENSION1 to end with EXTENSION2. 
If none of the following options are provided, renaming is done in the current 
directory for all files with EXTENSION1. 

    Where [OPTIONS] include: 
-v  --verbose print details of files being renamed 

-d  [directory] 
     --directory [full path] rename files specified in the directory 

-f  [filter] 
     --filter [wildcard] 
     use wildcard characters (* and ?) for renaming files 

-h  --help show this help 

    Examples: 
renamex htm html 
    (rename all .htm files to .html in the current directory) 
renamex -v log txt 
    (show verbose output while renaming all .log files to .txt) 
renamex -v -d "D:\images" JPG jpeg 
    (rename all .JPG files located in D:\images to .jpeg) 
renamex -v -d "D:\movies" -f *2011* MPG mpeg 
    (rename all .MPG files with 2007 in their names, in D:\movies to .mpeg) 
+0

En este caso, no quiero renombrar nada, solo quiero repetir una lista de archivos en la consola, en función de la salida que proporcioné. – Lukie

+0

'renamex' no se reconoce como un comando interno o externo, programa operable o archivo por lotes. – Joey

+0

@Joey - Vaya, agregué un enlace al guión. –

1

No es que no están de acuerdo con @ solución de Joey, pero pensé que no pasaría nada si he publicado una alternativa :

@ECHO OFF 
FOR %%f IN (*.js) DO (
    FOR %%g IN ("%%~nf") DO (
    IF NOT "%%~xg" == ".min" ECHO "%%f" -^> "%%~g.min.js" 
) 
) 
Cuestiones relacionadas