Пакетный файл для цикла за списком расширений файлов с исключениями - PullRequest
7 голосов
/ 18 июля 2011

Скажите, у меня есть следующие файлы в каталоге

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

как мне написать пакет для цикла таким образом, чтобы все файлы ".js" были выбраны, а ".min.js" - нет, а вывод имени файла .js можно изменить на добавление .min.js

например:

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

в идеале выдает следующее, и обратите внимание, что file2.min.js не отображается слева.

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

Спасибо за вашу помощь.

Ответы [ 3 ]

10 голосов
/ 18 июля 2011

Просто посмотрите, содержит ли оно уже .min.js:

setlocal enabledelayedexpansion
for %%f in (*.js) do (
  set "N=%%f"
  if "!N:.min.js=!"=="!N!" echo %%f -^> %%~nf.min.js
)
1 голос
/ 18 июля 2011

Не то чтобы я не соглашался с решением @ Joey, но я думал, что не повредит, если я опубликую альтернативу:

@ECHO OFF
FOR %%f IN (*.js) DO (
  FOR %%g IN ("%%~nf") DO (
    IF NOT "%%~xg" == ".min" ECHO "%%f" -^> "%%~g.min.js"
  )
)
0 голосов
/ 18 июля 2011

Раньше, когда я хотел сделать что-то подобное, я использовал скрипт renamex .Вот это с примерами:

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