Вы можете передать вывод type
в find
внутри предложения in(…)
цикла for /f
:
for /f %%A in ('
type "%~dpf1" ^| find /c /v ""
') do set "lineCount=%%A"
Но канал запускает подоболочку, которая замедляет работу.
Или вы можете перенаправить ввод из файла в find
следующим образом:
for /f %%A in ('
find /c /v "" ^< "%~dpf1"
') do set "lineCount=%%A"
Но этот подход даст вам ответ на 1 меньше, чем фактическое количество строк, если файлзаканчивается одной или несколькими пустыми строками, как показывает поздний foxidrive в подсчет строк в файле .
И опять же, вы всегда можете попробовать:
find /c /v "" example.txt
Проблема в том, что вывод приведенной выше команды выглядит следующим образом:
---------- EXAMPLE.TXT: 511
Вы можете разбить строку на двоеточие, чтобы получить счетчик, но их может быть больше, чемодна двоеточие, если в имени файла указан полный путь.
Вот мое решение этой проблемы:
for /f "delims=" %%A in ('
find /c /v "" "%~1"
') do for %%B in (%%A) do set "lineCount=%%B"
Это всегда будет хранить счет в переменной.
Всего одинпоследняя маленькая проблема ... find
рассматривает нулевые символы как символы новой строки.Поэтому, если в ваш текстовый файл проникли скрытые нули, или если вы хотите посчитать строки в файле Unicode, этот ответ не для вас.