Если я повторяю каждый файл, используя:
@echo off
FOR %%f IN (*\*.\**) DO (
echo %%f
)
как я могу распечатать расширение каждого файла? Я попытался назначить %% f временной переменной, а затем использовать код echo "%t:~-3%" для печати, но безуспешно.





Команда FOR имеет несколько встроенных переключателей, которые позволяют изменять имена файлов. Попробуйте следующее:
@echo off
for %%i in (*.*) do echo "%%~xi"
Для получения дополнительных сведений используйте help for, чтобы получить полный список модификаторов - их довольно много!
Это работает, хотя и не ослепительно быстро:
@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
Ответ Сэм определенно самый простой для того, что вы хотите. Но я хотел добавить:
Не используйте set как переменную внутри () из for и ожидайте, что сразу воспользуетесь ею, если только вы не выпустили ранее
setlocal ENABLEDELAYEDEXPANSION
и вы используете ! вместо%, чтобы обернуть имя переменной. Например,
@echo off
setlocal ENABLEDELAYEDEXPANSION
FOR %%f IN (*.*) DO (
set t=%%f
echo !t:~-3!
)
Проверить
set /?
для получения дополнительной информации.
Другой альтернативой является вызов подпрограммы для выполнения set, как показывает Pax.