Получить все файлы с определенным расширением - PullRequest
0 голосов
/ 21 января 2019

Я пытаюсь получить файл с определенным расширением из каталога. Для этого я использую следующий код командного файла:

for %%f in (.\*.ext) do (
     echo %%f
)

Это прекрасно работает, если у меня нет файла с расширением .extsomething.
Я попытался добавить подстановочный знак $, чтобы получить только точное соответствие, но он не показывает никаких результатов с ним.

for %%f in (.\*.ext$) do (
     echo %%f
)

Поскольку подстановочный знак * принят, почему $ не учитывается?
Как я могу получить только файлы с точным расширением?

Ответы [ 3 ]

0 голосов
/ 21 января 2019

Используйте команду Where:

@For /F "Delims=" %%A In ('Where .:*.ext 2^>Nul') Do @Echo %%A
0 голосов
/ 21 января 2019

Во-первых, нет $ подстановочного знака.Таким образом, это означает, что литерал $ .

Подстановочные знаки сопоставляются с обоими именами файла.Файл с расширением .txttttt имеет расширение короткого имени .txt.Поскольку первый файл в dir не конфликтовал с другим файлом, и его можно представить его длинным именем 8.3, у него нет короткого имени, так как его длинное имя допустимо.(PS второй текст.txt имеет начальные пробелы, используя \\?\C:\ test.txt).

C:\>dir /x t*.txt
 Volume in drive C is Windows
 Volume Serial Number is 9EE7-AAA5

 Directory of C:\

17/01/2019  11:23 AM               250              test.txt
26/02/2018  07:30 PM           195,776 TEST~1.TXT     test.txt
21/01/2019  05:50 PM                 5 TEST~2.TXT   test.txtttt
               3 File(s)        196,031 bytes
               0 Dir(s)  752,444,428,288 bytes free

См. Команда для запуска .bat файла

0 голосов
/ 21 января 2019

Просто добавьте оператор if:

@echo off
for %%f in (*.ext) do (
    if "%%~xf"==".ext" echo %%f
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...