#windows #batch-file
Вопрос:
Я хотел бы написать простую строку для перечисления всех файлов в папке с заданным расширением. Вот что я попробовал:
FOR %I IN (.*) DO IF %~NXI == *.asm @ECHO %~I
К сожалению, это не работает!
Проблема, похоже, связана с *
подстановочным знаком, потому что при изменении на просто:
FOR %I IN (.*) DO IF %~NXI == r_draw16.asm @ECHO %~I
это действительно работает — выводит .r_draw16.asm
результат, как и ожидалось!
Мой вопрос в том, ПОЧЕМУ решение с подстановочным знаком не работает и как его исправить, чтобы выполнить эту работу?
Комментарии:
1. Ну, раз вы ищете
asm
файлы, почему бы просто не использовать расширение?FOR %I IN (.*) DO @IF /I "%~xI" == ".asm" ECHO %~I
. В пакетном файле вам придется удвоить%
символы, т. е.@FOR %%I IN (.*) DO @IF /I "%%~xI" == ".asm" ECHO %%~I
. Однако это было бы проще в использовании@FOR %%I IN (.*.asm) DO @ECHO %%~I
. Если вы откроете окно командной строки, наберетеfor /?
и нажмете[ENTER]
клавишу, вы увидите все доступные модификаторы.2.
IF
сравнение — это строковые литералы, если вы не сравниваете целое число. Не существует формы регулярных выражений для сравнения сIF
командой.FINDSTR
Команда действительно имеет ограниченные возможности регулярного выражения.3. О чем
dir *.asm /A-D /B
? Откройте командную строку , запуститеdir /?
и прочитайте выходную справку. Было бы также хорошо запустить один разfor /?
иif /?
иecho /?
, а также командуhelp
, чтобы отобразить (неполный) список команд Windows , также объясненный SS64.com — Индекс A-Z команд Windows CMD .
Ответ №1:
Вы можете попробовать это:
@echo off
for %%I in (*.asm) do echo %%I