Script CMD di Windows per contare i file e ottenere nomi di file


4

Non ho molta familiarità con gli script CMD di Windows e ho bisogno di scriverne uno che verificherà il numero di file in una cartella specifica e memorizzerà i nomi dei file trovati nelle variabili (forse un array). Ecco cosa ho (% 1 è la cartella che ottengo come parametro):

ECHO ### Checking the number of files under %1 ###
for %%x in (%1\pdf*.*) do (
 set file[!numFiles!]=%%~nxf
 set /a numFiles+=1
) 
ECHO ### Number of files found: %numFiles%

for /L %%i in (0,1,2,3,4) do (
   echo !file[%%i]!
)

Perché non usare un paio di dir comandi? Un normale per analizzare il conteggio dalle righe di riepilogo e uno con /b per ottenere l'elenco dei file.
AFH

:: backslash-n si riferisce alla pressione del tasto Invio \ n echo ### Numero di file trovati: \ n dir% 1 | TROVA / C "/" \ n :: Questo non immagazzina roba nelle variabili, quindi è solo una risposta parziale. In realtà stai fondamentalmente chiedendo due cose, quindi potrebbero essere due domande.
TOOGAM

Risposte:


3

Come posso contare i file in una cartella specifica e memorizzare i nomi dei file in una matrice?

Esistono numerosi problemi con il tuo codice:

  1. Devi enabledelayedexpansion se hai intenzione di usarlo più tardi.

  2. Non hai inizializzato numFiles.

  3. %%~nxf dovrebbe essere %%~nfx.

  4. Il tuo per / l il comando ha la sintassi sbagliata (dovrebbe essere start,step,end ).

Ecco un file batch corretto (test.cmd):

@echo off
setlocal enabledelayedexpansion
ECHO ### Checking the number of files under %1 ###
set numFiles=0
for %%x in (%1\pdf*.*) do (
  set file[!numFiles!]=%%~nfx
  set /a numFiles+=1
 ) 
ECHO ### Number of files found: %numFiles%

set /a index=%numFiles%-1
for /L %%i in (0,1,%index%) do (
  echo !file[%%i]!
  )
endlocal

Esempio di utilizzo e output:

> dir *.pdf
 Volume in drive F is Expansion
 Volume Serial Number is 3656-BB63

 Directory of F:\test

21/02/2017  22:53                 0 pdf01.pdf
21/02/2017  22:53                 0 pdf02.pdf
21/02/2017  22:53                 0 pdf03.pdf
               3 File(s)              0 bytes
               0 Dir(s)  1,701,266,092,032 bytes free

> test .
### Checking the number of files under . ###
### Number of files found: 3
F:\test\pdf01.pdf
F:\test\pdf02.pdf
F:\test\pdf03.pdf

Ulteriori letture

  • Un indice A-Z della riga di comando di Windows CMD - Un eccellente riferimento per tutte le cose relative alla linea Windows cmd.
  • enabledelayedexpansion - Espansione ritardata causerà l'espansione delle variabili in fase di esecuzione anziché in fase di analisi.
  • per - Esegui condizionatamente un comando su diversi file.
  • per / l - Esegui condizionatamente un comando per un intervallo di numeri.
  • parametri - Un argomento (o parametro) della riga di comando è qualsiasi valore passato in uno script batch.

Grazie! Quasi perfetto. Ho appena dimenticato di dire che ho bisogno di prendere solo il nome del file (senza il percorso) ...
RonaldoMaia

@RonaldoMaia Sostituisci %%~nfx con %%~nxx
DavidPostill

@RonaldoMaia Hai bisogno di più aiuto? Se questo ha risposto alla tua domanda, ti preghiamo di non dimenticarti di farlo accetta la risposta .
DavidPostill
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.