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.

È stato utile?

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 .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top