Question

Si je parcourt chaque fichier à l'aide de:

@echo off

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

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

Était-ce utile?

La solution

La commande FOR comporte plusieurs commutateurs intégrés vous permettant de modifier les noms de fichiers. Essayez ce qui suit:

@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 en a plusieurs!

Autres conseils

Cela fonctionne, même si ce n'est pas extrêmement 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

La réponse de Sam est certainement la plus simple pour ce que vous voulez. Mais je voulais ajouter:

Ne ne définissez pas une variable à l'intérieur des () d'un pour et attendez-vous à l'utiliser immédiatement, sauf si vous avez précédemment publié

setlocal ENABLEDELAYEDEXPANSION

et vous utilisez ! au lieu de% pour envelopper le nom de la variable. Par exemple,

@echo off
setlocal ENABLEDELAYEDEXPANSION

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

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

)

Commander

set /?

pour plus d'informations.

L’autre possibilité consiste à appeler un sous-programme pour effectuer le set , comme Pax . .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top