Сценарій Windows CMD для підрахунку файлів та отримання імен файлів


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

Чому б не використати пару dirкоманд? Один звичайний для розбору підрахунку з рядків підсумків, і один /bдля отримання списку файлів.
AFH

:: backslash-n відноситься до натискання клавіші Enter \ n echo ### Кількість знайдених файлів: \ n dir% 1 | FIND / C "/" \ n :: Це не зберігає матеріал у змінних, тому це лише часткова відповідь. Дійсно, ви в основному запитуєте дві речі, тож це може бути два питання.
TOOGAM

Відповіді:


3

Як підрахувати файли у певній папці та зберегти назви файлів у масиві?

У коді є ряд проблем:

  1. Вам потрібно активувати розширення, якщо ви збираєтесь його використовувати пізніше.

  2. Ви не ініціалізували numFiles.

  3. %%~nxfповинно бути %%~nfx.

  4. Ваш для / л команда має неправильний синтаксис (він повинен бути 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 - відмінна довідка для всіх речей, що стосуються cmd-рядка Windows.
  • enabledelayedexpansion - затримка розширення призведе до розширення змінних на час виконання, а не на час розбору.
  • для - Умовно виконуйте команду на декількох файлах.
  • для / l - умовно виконуйте команду для діапазону чисел.
  • Параметри - Аргумент командного рядка (або параметр) - це будь-яке значення, передане в пакетний сценарій.

Дякую! Майже ідеально. Я просто забув згадати, що мені потрібно схопити лише ім'я файлу (без шляху) ...
RonaldoMaia

@RonaldoMaia Замінити %%~nfxна%%~nxx
DavidPostill

@RonaldoMaia Вам потрібна додаткова допомога? Якщо це відповіло на ваше запитання, будь ласка, не забудьте прийняти відповідь .
DavidPostill
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.