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

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top