4

Я не очень знаком со сценариями Windows CMD, и мне нужно написать один, который будет проверять количество файлов в определенной папке и сохранять имена файлов, найденные в переменных (возможно, массиве). Вот что у меня есть (% 1 - это папка, которую я получаю в качестве параметра):

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]!
)

1 ответ1

3

Как мне подсчитать файлы в определенной папке и сохранить имена файлов в массиве?

Есть ряд проблем с вашим кодом:

  1. Вам нужно включить задержку расширения, если вы собираетесь использовать его позже.

  2. Вы не инициализировали numFiles .

  3. %%~nxf должен быть %%~nfx .

  4. Ваша команда for /l имеет неправильный синтаксис (это должно быть start,step,end).

Вот исправленный командный файл (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

Пример использования и вывод:

> 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

Дальнейшее чтение

  • Индекс AZ командной строки Windows CMD - Отличный справочник по всем вопросам, связанным с командной строкой Windows.
  • enabledelayedexpansion - отложенное расширение приведет к тому, что переменные будут расширяться во время выполнения, а не во время анализа.
  • for - условно выполнить команду на несколько файлов.
  • for /l - условно выполнить команду для диапазона чисел.
  • параметры - аргумент командной строки (или параметр) - это любое значение, переданное в пакетный скрипт.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .