Подсчет не работает в пакетном файле - PullRequest
2 голосов
/ 04 января 2011

Я пытался посчитать количество строк в файле, используя пакетный файл (windows xp sp3).Вот мой код:

@echo off

set line=0
FOR /F "usebackq delims=" %%a in (foo) do (
    set /A line+=1
    echo line count: %line%
    )

echo number of lines: %line%

Хотя он правильно считает строки, но вывод echo не тот, который я ожидаю.Я думаю, что это как-то связано с отложенным расширением переменной, поэтому я попробовал также SetLocal EnableDelayedExpansion, но это тоже не работает.

вот вывод, который я получаю:

C:\fiddle\temp>a.bat
line count: 0
line count: 0
line count: 0
line count: 0
line count: 0
number of lines: 5

Что здесь не так?

К вашему сведению: я вошел в это, когда искал ответ на ЭТОТ вопрос.

Ответы [ 2 ]

6 голосов
/ 04 января 2011

Добавить эту строку:

SETLOCAL ENABLEDELAYEDEXPANSION

Изменить эту строку:

echo line count: %line%

к этому:

echo line count: !line!

Итак, весь скрипт будет выглядеть так:

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION

set line=0
FOR /F "usebackq delims=" %%a in (foo) do (
    set /A line+=1
    echo line count: !line!
    )

echo number of lines: %line%
1 голос
/ 04 января 2012

Пакетный скрипт, который я использую для подсчета количества строк, выглядит следующим образом. вызовите его из командной строки с вашим входным файлом в качестве параметра.

@echo off & setLocal EnableDELAYedeXpansion

for /f "tokens=1 delims=[]" %%a in ('find /v /c "" ^< %1') do (
echo %~n1 %%a
)
...