Это требования:
- Укажите символы подстановки для проверки в переменной.
- Для каждого символа подстановки проверьте, есть ли файлы или нет.Предупредить пользователя, если нет (просто
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 делает расширение, которое мне не нужно.