Se vuoi farlo con cmd
, allora il seguente è il modo banale per farlo:
set count=0 & for %x in (*) do @(set /a count+=1 >nul)
echo %count%
Questo presuppone che la riga di comando. In un file batch lo faresti
@echo off
setlocal enableextensions
set count=0
for %%x in (*) do set /a count+=1
echo %count%
endlocal
il che rende le cose un po 'più belle. Puoi rilasciarlo >nul
in un batch, poiché set /a
non visualizzerà il risultato se eseguito da un file batch, ma direttamente dalla riga di comando. Inoltre, il %
segno nel for
loop deve essere raddoppiato.
Ho visto parecchi casi in cui le persone provano astuti trucchi find /c
. Stai molto attento con quelli, poiché varie cose possono rompere questo.
Errori comuni:
Utilizzare find /c /v
e provare a trovare qualcosa che non è mai incluso in un nome di file, ad esempio ::
. Non lo faranno. Opera. Affidabile. Quando la finestra della console è impostata su caratteri raster, è possibile ottenere quella combinazione di caratteri. Posso includere caratteri in un nome di file come :
, ad esempio , ?
ecc. Nelle loro varianti a larghezza intera, ad esempio, che verranno quindi convertiti nelle loro normali controparti ASCII, che romperanno questo. Se hai bisogno di un conteggio accurato, non provare questo.
Utilizzare find /c
e provare a trovare qualcosa che è sempre incluso in un nome file. Ovviamente il punto ( .
) è una cattiva scelta. Un'altra risposta suggerisce
dir /a-d | find /c ":"
che presuppone diverse cose sulla localizzazione dell'utente, non tutte sono garantite come vere (ho lasciato un commento che descrive in dettaglio i problemi lì) e restituisce un risultato troppo.
In genere, si desidera utilizzare find
su ciò dir /b
che elimina tutte le cose senza nome di file ed evita errori di fencepost in quel modo.
Quindi la variante elegante sarebbe:
dir /b /a-d | find /c /v ""
che produrrà prima tutti i nomi dei file, una riga ciascuno. E quindi contare tutte le righe di quell'output che non sono vuote. Dal momento che il nome del file non può essere vuoto (a meno che non mi manchi qualcosa, ma Unicode non lo farà scattare in base ai miei test).