Отправка результата из FIND в IF в cmd - PullRequest
0 голосов
/ 27 апреля 2018

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

Когда этот пакетный файл вызывается в CMD, он получает 4 параметра:

  • (1) Путь к некоторому каталогу с \ в конце; пример: C: \ Users \ PC \ Desktop \
  • (2) расширение файла; пример: txt
  • (3) Некоторая строка; пример: "ab"
  • (4) целое число; пример: 3

Цель этого пакетного файла - найти все файлы X с расширением (2) в локальном каталоге и все подкаталоги, полученные (1), имеющие более (4) строк в них, имеющие подстроку (3), и запись в консоли следующее предложение:

"Файл X имеет более (4) залоговых прав, более точный Y, которые имеют подстроку (3)". Где X - полный путь файла, который удовлетворяет этим условиям, а Y - точное количество строк, в которых найдена подстрока.

Ввод в консоли должен быть следующим: myfile.bat C: \ Users \ PC \ Desktop \ txt ab 3

Моя попытка решить эту проблему была такой:

@echo off
for %%a in ('dir /s %1*.%2') do (
    for /f "delims= " %%G in ('find /c "%3" ^<%%a') do (
        set linecount=%%G
        if %linecount% gtr %4 (
            echo File %%a has more than %4 lines, more precisley %linecount% which have substring %3
        )
    )
)

Надеюсь, на этот раз я сделал это частично правильно.

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

Я нашел решение:

@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%a in ('dir /s /b "%1*.%2"') do (
    for /f "delims=: tokens=3" %%g in ('find /c "%3" "%%a"') do (
        set linecount=%%g
        if !linecount! gtr %4 (
            echo File %%a has more than %4 lines, more precisley !linecount! which have substring %3
        )
    )
)

Большое спасибо всем за то, что сделали это возможным.

0 голосов
/ 27 апреля 2018

Исходя из параметров вашего вопроса на сегодняшний день, и, к черту, просто так , вот решение для обработки одной строки в пакетном файле, (с очень ограниченным тестированием) :

@For /F "Delims=" %%A In ('Dir/B/S/A-D-S-L "%~1*.%2"') Do @For /F "Tokens=3Delims=:" %%B In ('Find /I /C "%~3" "%%A"') Do @If %%B Gtr %4 Echo File %%A has more than %4 lines, more precisley%%B, which have substring %3

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

@For /F "Delims=" %%A In ('Where/R "%~1" *.%2') Do @For /F "Tokens=3Delims=:" %%B In ('Find /I /C "%~3" "%%A"') Do @If %%B Gtr %4 Echo File %%A has more than %4 lines, more precisley%%B, which have substring %3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...