estensione del file di ricerca batch
-
02-07-2019 - |
Domanda
Se sto ripetendo ogni file usando:
@echo off
FOR %%f IN (*\*.\**) DO (
echo %%f
)
come posso stampare l'estensione di ogni file? Ho provato ad assegnare %% f a una variabile temporanea, quindi utilizzando il codice: echo "% t: ~ -3% "
per stampare, ma senza successo.
Soluzione
Il comando FOR ha diverse opzioni integrate che consentono di modificare i nomi dei file. Prova quanto segue:
@echo off
for %%i in (*.*) do echo "%%~xi"
Per ulteriori dettagli, usa aiuto per
per ottenere un elenco completo dei modificatori - ce ne sono parecchi!
Altri suggerimenti
Funziona, anche se non è velocissimo:
@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
Sam la risposta è sicuramente la più semplice per quello che vuoi. Ma volevo aggiungere:
Non impostare
una variabile all'interno di ()
di un per
e non aspettarti di usarlo subito, a meno che tu non abbia precedentemente pubblicato
setlocal ENABLEDELAYEDEXPANSION
e stai usando !
invece di% per racchiudere il nome della variabile. Ad esempio,
@echo off
setlocal ENABLEDELAYEDEXPANSION
FOR %%f IN (*.*) DO (
set t=%%f
echo !t:~-3!
)
Scopri
set /?
per maggiori informazioni.
L'altra alternativa è quella di chiamare una subroutine per eseguire il set
, come mostra gli spettacoli Pax .