2011-07-18 12 views
7

że mam następujące pliki w kataloguBatch File Do pętli na liście rozszerzeń plików z wyłączeń

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

jak mogę napisać partii dla pętli tak, że wszystkie „js” pliki są pobierane, ale „.min.js” nie są i wyjście pliku .js może zostać zmieniony, aby dołączyć .min. js

np

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

byłoby idealnie wytwarzać następujące, i zanotuj file2.min.js nie jest wyświetlany po lewej stronie.

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

Dzięki za pomoc.

Odpowiedz

10

Wystarczy spojrzeć, czy już zawiera .min.js:

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

Fantastyczna .. pracowała uczta, dzięki! – Lukie

0

W przeszłości, gdy chciałem zrobić coś podobnego, użyłem skryptu renamex. Oto ona z przykładów:

 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

W tym przypadku nie chcę zmieniać nazwy, chcę tylko wysyłać do plików pliki listy na podstawie podanego wyjścia. – Lukie

+0

"renamex" nie jest rozpoznawany jako polecenie wewnętrzne lub zewnętrzne, program operacyjny lub plik wsadowy. – Joey

+0

@Joey - Ups, dodałem link do skryptu. –

1

Nie dlatego, że nie zgadzam się z @ rozwiązania Joey'a, ale pomyślałem, że nie zaszkodzi, gdybym pisał alternatywę :

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