Если существует с несколькими подстановочными знаками - PullRequest
2 голосов
/ 11 марта 2019

Это требования:

  • Укажите символы подстановки для проверки в переменной.
  • Для каждого символа подстановки проверьте, есть ли файлы или нет.Предупредить пользователя, если нет (просто echo).
  • Обработка полученных файлов.

То, что я пробовал (применимо только к одному символу подстановки):

SET wildcard=a*.txt
cd c:\somedirectory
IF EXIST "%wildcard%" (
    REM PROCESS THE FILES
) ELSE (
    ECHO There are no files that match that wildcard, please review.
)

Это, очевидно, работает, только если подстановочный знак уникален.

Что я пробовал:

SET wildcard=a*.txt b*.txt
cd c:\somedirectory
FOR %%A IN (%wildcard%) DO (
    ECHO %%A
)

Это печатает файлыкоторые соответствуют a*.txt или b*.txt.Я не хочу, чтобы это расширение произошло.Мне нужно фактическое значение подстановочного знака, чтобы войти в цикл.

С расширением я не могу сказать пользователю, что некоторые его подстановочные знаки не имеют файлов.Например, есть файлы a*.txt, но нет файлов b*.txt.Мне нужно сказать это пользователю.Что-то вроде:

a * .txt: есть файлы.
b * .txt: файлов нет, просмотрите, пожалуйста.

Что-тонапример (это не работает, просто идея того, что я ищу):

SET wildcard=a*.txt b*.txt c*.txt
cd c:\somedirectory

REM loop on the wildcards
FOR %%A IN (%wildcard%) DO (

    REM verify if there are files for that wildcard
    IF EXIST %%A (

        REM loop on the files from the specific wildcard
        FOR %%F IN (%%A) DO (
            REM PROCESS THE FILES
        )
    ) ELSE (
        ECHO This pattern %%A has no files associated
    )
)

В принципе, можно ли предотвратить расширение значений в %wildcard% внутри оператора IF?


Для комментария @ double-beep:

  • ваша идея о множественных IF EXIST утверждениях - именно то, что я хочу, но я не знаю, сколько подстановочных знаковпользователь захочет.

    SET wildcard=a*.txt b*.txt [...]
    REM this would be ok
    IF EXIST a*.txt ( ... )
    IF EXIST b*.txt ( ... )
    [...]
    

Но как мне сделать это гибким, основываясь на том, что пользователь помещает в переменную wilcard?Я думал о зацикливании значений подстановочных знаков, но FOR делает расширение, которое мне не нужно.

1 Ответ

1 голос
/ 11 марта 2019

Как насчет этого фрагмента кода, используя call с параметрами, которые не разрешают символы подстановки:

@echo off
set "WildCard=a*.txt b*.txt *.vi"

call :LOOP %WildCard%
rem ...
goto :EOF


:LOOP
    if "%~1"=="" goto :EOF
    if exist "%~1" echo There are files that match the pattern: "%~1"
    shift /0
    goto :LOOP
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...