Как сравнить формат файла в пакетном сценарии Windows

У меня есть список имен файлов, который содержит .xml, .css, .js, .jsp, .java и т. д. Мне нужен код, который позволит вам выполнять вашу функцию только тогда, когда этот файл имеет расширение .js или .jsp или .java. Я не знаю, как проверить множественное условие в выражении if. вот почему добавление как ИЛИ ..пожалуйста, помогите мне ..Спасибо

   FOR /F "delims=#" %%A in (demo.txt) do (

    IF [/I] %%~xA==".js" OR %%~xA==".css" OR %%~xA==".java"

    (

    echo correct format

    )

    ELSE

    (

    ECHO incorrect format

    ) 

)

person user2918831    schedule 25.10.2013    source источник


Ответы (3)


Создайте переменную, содержащую список всех допустимых расширений. Обязательно добавьте дополнительную точку в конце, чтобы все расширения были заключены в точки. Затем для каждого значения попробуйте выполнить поиск и замену в списке, заменив найденное расширение (плюс точка) ничем. Если результат отличается от исходного списка, расширение допустимо.

@echo off
setlocal enableDelayedExpansion
set "formats=.css.js.jsp.java."
for /f "delims=#" %%A in (demo.txt) do (
  if "!formats:%%~xA.=!" neq "!formats!" (
    echo %%~xA is correct format
  ) else (
    echo %%~xA is incorrect format
  )
)

См. раздел ЕСЛИ… ИЛИ ЕСЛИ… в пакетном файле Windows, чтобы узнать о дополнительных методах реализации логики ИЛИ.

person dbenham    schedule 25.10.2013
comment
проще, чем моя попытка. +1 - person npocmaka; 25.10.2013
comment
Большое спасибо... ваш код работает отлично.. Большое спасибо :) - person user2918831; 25.10.2013
comment
@ user2918831 - Не забудьте принять ответ, который вы считаете наиболее полезным, если он полностью отвечает на ваш вопрос. Просто нажмите на галочку в левом верхнем углу ответа. Это действие позволяет другим узнать, что на вопрос был дан ответ, дает вам 2 очка репутации, дает плакату с ответом 15 очков репутации. На вопрос может быть принят только один ответ. Как только вы наберете 15 очков репутации, вы сможете проголосовать за любой ответ, который вы сочтете полезным, включая ответы на вопросы других людей. - person dbenham; 25.10.2013

Если список файлов в demo.txt указан в OP

for /F "tokens=*" %%f in ('type demo.txt ^| findstr /i /e ".js .java .jsp"') do (
    rem here what needs to be done
    echo %%f
)

Если файлы находятся в каталоге, замените type demo.txt на dir /b ...., настроив каталог для обработки.

person MC ND    schedule 25.10.2013
comment
вам нужно сбежать из трубы - person npocmaka; 25.10.2013
comment
и findstr /i /e /c:"jsp" /c:"java" ... - person npocmaka; 25.10.2013
comment
Исправлено. Скопировал и вставил из командной строки, забыл исправить. - person MC ND; 25.10.2013
comment
Нет, /C: не нужно. В документации указано, что пробелы разделяют несколько подстрок, ЕСЛИ НЕ используется /c. - person MC ND; 25.10.2013
comment
проверить это: echo some.js| findstr /i /e ".js .java .jsp" - person npocmaka; 25.10.2013
comment
Если не удается, потому что эхо выводит одну кавычку в конце. А findstr /e говорит, что совпадение должно быть в конце. Так что нет совпадений. - person MC ND; 25.10.2013
comment
Прости. Теперь я вижу, что вы отредактировали свой тест. новая версия возвращает некоторые.js - person MC ND; 25.10.2013

попробуй это:

@ECHO OFF &SETLOCAL
for /f "delims=#" %%a in (demo.txt) do (
    set "flag="
    if /i "%%~xa"==".js" set "flag=true"
    if /i "%%~xa"==".css" set "flag=true"
    if /i "%%~xa"==".java" set "flag=true"
    if defined flag (echo %%~xa is valid) else echo %%~xa is not valid
)
person Endoro    schedule 25.10.2013