Як знайти кількість рядків у файлі за допомогою пакетного сценарію


2

Я хочу порахувати кількість рядків у файлі, використовуючи пакет.

Я пережив це , але не міг зрозуміти, як я початківець. Я написав власний фрагмент коду з базовими знаннями.

@echo off
set "file=abc.csv"
set /a x=0
for /f "usebackq delims=" %%p in ("%file%") do (
  echo %x%
  pause>nul
  set /a x=%x%+1
)

Коли я запускаю вищевказаний код, я отримую 0 як вихід. Може хтось, будь ласка, допоможе мені розібратися з помилкою?


2
Я знаю, ви сказали "Пакет", але мені завжди шкодить бачити занадто важкий і нечитабельний код для такої легкої задачі. Отже ось рішення PowerShell: $a = (get-content "C:\abc.csv" | measure-object).count$ змінна тепер містить кількість рядків у вашому файлі.
SimonS

2
@SimonS Командний рядок - це також один вкладиш;) Дивіться мою відповідь. Я вважаю пакетні файли легшими для читання, ніж PowerShell;)
DavidPostill

2
@DavidPostill, але ти (не зрозумій мене тут неправильним), майстер старої школи катастрофи ;-). якщо ви новачок в сценаріях Windows, то shellhell однозначно легше читати. no / v або / c перемикач, де вам потрібно прочитати файл довідки, щоб отримати його сенс. додатково PowerShell - це новий cmd (це його наступник), і я б закликав будь-якого адміністратора / скриптера використовувати PowerShell замість cmd.
SimonS

Відповіді:


2

Я хочу порахувати кількість рядків у файлі, використовуючи пакет

Конкретне рішення

З командного рядка:

F:\test>for /f "usebackq" %b in (`type abc.csv ^| find "" /v /c`) do @echo line count is %b
line count is 1

З пакетного файлу (countlines.cmd):

@echo off
Setlocal EnableDelayedExpansion
  for /f "usebackq" %%b in (`type abc.csv ^| find "" /v /c`) do (
    echo line count is %%b
    )
  )

Приклад:

F:\test>countlines
line count is 1
F:\test>

Гнучке рішення

Використовуйте такий пакетний файл (countlines.cmd):

@echo off
Setlocal EnableDelayedExpansion
for /f "usebackq" %%a in (`dir /b /s %1`)  do (
  echo processing file %%a
  for /f "usebackq" %%b in (`type %%a ^| find "" /v /c`) do (
    echo line count is %%b
    set /a lines += %%b
    )
  )
echo total lines is %lines%

Примітки:

  • Загальна кількість рядків зберігається в %lines%.
  • Пакетний файл підтримує підстановку.
  • Коректируйте echo ...команди відповідно.

Використання:

countlines filename_expression

Приклад:

F:\test>countlines *.csv
processing file F:\test\abc.csv
line count is 1
processing file F:\test\def.csv
line count is 1
total lines is 2

Подальше читання

  • Індекс AZ командного рядка Windows CMD - відмінна довідка для всіх речей, що стосуються cmd-рядка Windows.
  • dir - Відображення списку файлів і папок.
  • find - Пошук текстового рядка у файлі та відображення всіх рядків, де він знайдений.
  • for / f - команда Loop проти результатів іншої команди.

1

Простий спосіб підрахунку кількості рядків у файлі в системі Microsoft Windows - це за допомогою наступної команди:

find /v /c "" somefile.txt

/cОпція підраховує кількість рядків , в той час як /vопція відображає всі рядки , що не містять зазначену рядок. Оскільки нульовий рядок, тобто "", трактується як ніколи не збігається, ви повинні побачити кількість рядків у відображеному файлі - див. Дурний трюк командного рядка: Підрахунок кількості рядків у статті stdin у блозі Microsoft Developer's Raymond Chen, Функція Old New Thing для пояснення того, чому це працює, і як помилка в самій ранній версії MS-DOS команди find стала функцією, яка залишається донині. Операційна система MS-DOS являла собою операційну систему для ранніх ПК, яку надала Microsoft задовго до того, як компанія створила Microsoft Windows.


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