пакетное расширение поиска файла - PullRequest
18 голосов
/ 26 сентября 2008

Если я перебираю каждый файл, используя:

@echo off

FOR %%f IN (*\*.\**) DO (
    echo %%f
)

как я могу распечатать расширение каждого файла? Я попытался присвоить %% f временной переменной, а затем использовать код: echo "%t:~-3%" для печати, но безуспешно.

Ответы [ 3 ]

34 голосов
/ 26 сентября 2008

Команда FOR имеет несколько встроенных переключателей, которые позволяют вам изменять имена файлов. Попробуйте следующее:

@echo off
for %%i in (*.*) do echo "%%~xi"

Для получения более подробной информации, используйте help for, чтобы получить полный список модификаторов - их довольно много!

6 голосов
/ 26 сентября 2008

Это работает, хотя и не слишком быстро:

@echo off
for %%f in (*.*) do call :procfile %%f
goto :eof

:procfile
    set fname=%1
    set ename=
:loop1
    if "%fname%"=="" (
        set ename=
        goto :exit1
    )
    if not "%fname:~-1%"=="." (
        set ename=%fname:~-1%%ename%
        set fname=%fname:~0,-1%
        goto :loop1
    )
:exit1
    echo.%ename%
    goto :eof
3 голосов
/ 03 апреля 2009

Сэм ответ, безусловно, самый простой для того, что вы хотите. Но я хотел добавить:

Не set переменная внутри () в for и не ожидайте ее использования сразу, если только вы ранее не выдали

setlocal ENABLEDELAYEDEXPANSION

и вы используете ! вместо% для переноса имени переменной. Например,

@echo off
setlocal ENABLEDELAYEDEXPANSION

FOR %%f IN (*.*) DO (

   set t=%%f
   echo !t:~-3!

)

Выезд

set /?

для получения дополнительной информации.

Другой альтернативой является вызов подпрограммы для выполнения set, как показано Pax .

...