lot rechercher extension de fichier
-
02-07-2019 - |
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.
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 . .