пакетный поиск расширения файла
-
02-07-2019 - |
Вопрос
Если я перебираю каждый файл, используя :
@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
переменная внутри ()
часть из a for
и рассчитывайте использовать его сразу же, если только вы ранее не выпустили
setlocal ENABLEDELAYEDEXPANSION
и вы используете !
вместо % обернуть имя переменной.Например,
@echo off
setlocal ENABLEDELAYEDEXPANSION
FOR %%f IN (*.*) DO (
set t=%%f
echo !t:~-3!
)
Проверьте
set /?
для получения дополнительной информации.
Другой альтернативой является вызов подпрограммы для выполнения set
, как Чел. Шоу.