2008-09-26 10 views
17

Si je suis itérer sur chaque fichier en utilisant:lot extension de fichier find

@echo off 

FOR %%f IN (*\*.\**) DO (
    echo %%f 
) 

comment pourrais-je imprimer l'extension de chaque fichier? J'ai essayé d'affecter %% f à une variable temporaire, puis en utilisant le code: echo "%t:~-3%" pour imprimer mais sans succès.

Répondre

32

La commande FOR a plusieurs commutateurs intégrés qui vous permettent de modifier les noms de fichier. Effectuez les opérations suivantes:

@echo off 
for %%i in (*.*) do echo "%%~xi" 

Pour plus de détails, utilisez help for pour obtenir une liste complète des modificateurs - il y a un assez grand nombre!

5

Cela fonctionne, bien que ce n'est pas aveuglante rapide:

@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 
2

réponse de Sam est certainement le plus facile pour ce que vous voulez. Mais je voulais ajouter:

Ne pas set une variable dans les () « s d'un for et attendre à l'utiliser tout de suite, à moins que vous avez déjà émis

setlocal ENABLEDELAYEDEXPANSION 

et que vous utilisez ! à la place de% pour envelopper le nom de la variable. Par exemple,

@echo off 
setlocal ENABLEDELAYEDEXPANSION 

FOR %%f IN (*.*) DO (

    set t=%%f 
    echo !t:~-3! 

) 

Découvrez

set /? 

pour plus d'informations.

L'autre alternative consiste à appeler un sous-programme pour faire le set, comme Pax spectacles.