Результат хранения пакетной переменной из команды - PullRequest
1 голос
/ 31 января 2020

Мне кажется, это очень простой вопрос, однако я много борюсь с этим и пока не нашел ответа. Моя цель состоит в том, чтобы посчитать вхождения указанной строки c в файл. Я делаю или пытаюсь сделать это, используя следующую команду:

for /f "tokens=2 delims=;" %%a in ('path to file with searchstring') do (
   set count=('path to file I am searching in' find /c "%%a")
   if !count! NEQ 0 echo !count!
)

Мне кажется, это просто, но вторая строка кажется неправильной при выходе из скрипта. Я хочу сохранить результат find в переменной, потому что я хочу только превзойти ненулевые результаты.

1 Ответ

0 голосов
/ 01 февраля 2020

Вот пример , использующий , для лучшего соответствия слов, (он использует имена файлов из вашего предыдущего вопроса) :

@(For /F "UseBackQTokens=2Delims=;" %%G In ("classID.txt")Do @(Set "count=0"
        For /F %%H In ('^""%__AppDir__%findstr.exe" /IN "\<%%G\>" "trc.txt"^"'
        )Do @(Set /A count+=1)&SetLocal EnableDelayedExpansion
        If !count! Gtr 0 (Echo %%G: !count!)&Endlocal))&Pause

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

@Echo Off
For /F "UseBackQ Tokens=2 Delims=;" %%G In (
    "classID.txt"
) Do (
    Set "count=0"
    For /F %%H In (
        '^""%__AppDir__%findstr.exe" /I /N "\<%%G\>" "trc.txt"^"'
    ) Do (
        Set /A count +=1
    )
    SetLocal EnableDelayedExpansion
    If !count! Gtr 0 (
        Echo %%G: !count!
    )
    Endlocal
)
Pause

И пример, заключенный в скобки, выводит результаты в файл с именем results.txt:

@Echo Off
(
    For /F "UseBackQ Tokens=2 Delims=;" %%G In (
        "classID.txt"
    ) Do (
        Set "count=0"
        For /F %%H In (
            '^""%__AppDir__%findstr.exe" /IN "\<%%G\>" "trc.txt"^"'
        ) Do (
            Set /A count +=1
        )
        SetLocal EnableDelayedExpansion
        If !count! Gtr 0 (
            Echo %%G: !count!
        )
        Endlocal
    )
)>"results.txt"
...