lote extensão de arquivo achado
-
02-07-2019 - |
Pergunta
Se eu sou iteração sobre cada arquivo usando:
@echo off
FOR %%f IN (*\*.\**) DO (
echo %%f
)
como eu poderia imprimir a extensão de cada arquivo? Eu tentei atribuindo %% f a uma variável temporária e, em seguida, usando o código:. echo "%t:~-3%"
para imprimir, mas sem sucesso
Solução
O comando para tem vários built-in opções que lhe permitem modificar nomes de arquivo. Tente o seguinte:
@echo off
for %%i in (*.*) do echo "%%~xi"
Para mais detalhes, o uso help for
para obter uma lista completa dos modificadores - há muito poucos
Outras dicas
Isso funciona, embora não seja extremamente rápido:
@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
resposta Sam 's é definitivamente o mais fácil para que você quer. Mas eu queria acrescentar:
Do not set
uma variável dentro da ()
do de um for
e esperar para usá-lo imediatamente, a menos que tenha emitido anteriormente
setlocal ENABLEDELAYEDEXPANSION
e você estiver usando !
em vez de% para embrulhar o nome da variável. Por exemplo,
@echo off
setlocal ENABLEDELAYEDEXPANSION
FOR %%f IN (*.*) DO (
set t=%%f
echo !t:~-3!
)
Confira
set /?
para mais informações.
A outra alternativa é chamar uma sub-rotina para fazer o set
, como Pax shows.