Como faço para contar os arquivos em uma pasta específica e armazenar os nomes de arquivos em uma matriz?
Existem vários problemas com o seu código:
-
Você precisa expansão enabledelayed se for usá-lo mais tarde.
-
Você não inicializou
numFiles
. -
%%~nxf
deve ser%%~nfx
. -
Seu comando / l tem a sintaxe incorreta (deve ser
start,step,end
).
Aqui está um arquivo de lote corrigido (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
Exemplo de uso e saída:
> 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
Leitura Adicional
- Um índice A-Z da linha de comando do Windows CMD - Uma excelente referência para todas as coisas relacionadas à linha do Windows cmd.
- enabledelayedexpansion - Expansão com atraso fará com que as variáveis sejam expandidas em tempo de execução e não no tempo de análise.
- para - Realize condicionalmente um comando em vários arquivos.
- para / l - Realize condicionalmente um comando para um intervalo de números.
- parâmetros - Um argumento de linha de comando (ou parâmetro) é qualquer valor passado para um script em lote.