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