Script do Windows CMD para contar arquivos e obter nomes de arquivos

4

Não estou muito familiarizado com os scripts do Windows CMD e preciso escrever um que verifique o número de arquivos em uma pasta específica e armazene os nomes de arquivos encontrados em variáveis (talvez em uma matriz). Aqui está o que eu tenho (% 1 é a pasta que estou obtendo como parâmetro):

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]!
)
    
por RonaldoMaia 21.02.2017 / 23:06

1 resposta

3

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:

  1. Você precisa expansão enabledelayed se for usá-lo mais tarde.

  2. Você não inicializou numFiles .

  3. %%~nxf deve ser %%~nfx .

  4. 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.
por 22.02.2017 / 00:19