CMD/BAT - [решено] FINDSTR работа с найденым файла

Ответить
Аватара пользователя
a503593

CMD/BAT - [решено] FINDSTR работа с найденым файла

Сообщение a503593 »

Доброго времени суток!

Подскажите пожалуйста как решить такую задачу, никак не могу найти решение.

Есть батник, который ищет файл по параметрам:



@echo off

Setlocal EnableDelayedExpansion

@echo zadaem param

set sm=239

rem ищем

findstr /s /m "!sm!" C:\b1\test1\*.*



Дальше нужно скопировать найденный файл, но никак не могу найти как. Пробовал делать так:

findstr /s /m "!sm!" C:\b1\test1\*.* > C:\b1\temp1\t1.txt



В текстовый док копируется полный путь к файлу, но опять же как его достать и этот файлик скопировать никак не могу найти.

Если кто знает подскажите пожалуйста. Заранее спасибо.
Аватара пользователя
Guest

Re: CMD/BAT - [решено] FINDSTR работа с найденым файла

Сообщение Guest »

Код:

Код: Выделить всё

For /F "delims=" %%A In ('findstr /s /m "!sm!" C:\b1\test1\*.* ') Do ( Copy "%%~A" "Куда копировать")
Аватара пользователя
a508475

Re: CMD/BAT - [решено] FINDSTR работа с найденым файла

Сообщение a508475 »

Спасибо! Все работает!

Не могли бы прокомментировать код, а то не совсем понимаю принцип работы.
Аватара пользователя
a508475

Re: CMD/BAT - [решено] FINDSTR работа с найденым файла

Сообщение a508475 »

a508475, FindStr с ключом /M выводит только имя (и полный путь, в случае использования одновременно с /S) файла, в котором найдена искомая строка. С помощью цикла For с пустым разделителем (это означает, что мы получаем входящую строку "как есть") это имя записывается во временную переменную внутри цикла (%%A) и далее копируется с помощью Copy. Советую почитать справку For /?, там всё гораздо более подробно описано.
Аватара пользователя
a508475

Re: CMD/BAT - [решено] FINDSTR работа с найденым файла

Сообщение a508475 »

findstr этот шаг я сам делал, мне непонятно как раз с for

%%А - это переменная? в мануале к батнику написано что переменные обозначаются между знаками ! - например !j!

/f "delims=" что делает? делимс это какая то синтаксическая константа?
Аватара пользователя
a508475

Re: CMD/BAT - [решено] FINDSTR работа с найденым файла

Сообщение a508475 »

Цитата a508475:



%%А - это переменная?
CMD/BAT - [решено] FINDSTR работа с найденым файла




Это внутренняя переменная, которая работает только внутри цикла For.


Цитата a508475:



/f "delims=" что делает? делимс это какая то синтаксическая константа?
CMD/BAT - [решено] FINDSTR работа с найденым файла




Устанавливает пустой разделитель вместо разделителя по умолчанию. Цитата из For /? (Эту справку я вам всё же рекомендую прочитать, чтобы мне не приходилось дословно её пересказывать):


Цитата:





Код:

Код: Выделить всё

FOR /F ["ключи"] %переменная IN (`команда`) DO команда [параметры]

...Необязательный параметр "ключи" служит для переопределения правил разбора по умолчанию. Он представляет собой заключенную в кавычки строку, содержащую одно или несколько ключевых слов для определения параметров разбора.
читать дальше »




Код:

Код: Выделить всё

        eol=c           - знак начала комментария в конце строки
                          (допускается задание только одного знака).
        skip=n          - число пропускаемых при обработке строк в начале
                          файла.
        delims=xxx      - набор разделителей вместо используемых по умолчанию
                          пробела и знака табуляции.
        tokens=x,y,m-n  - номера подстрок из каждой строки, передаваемые в тело
                          цикла "for" для каждой итерации. При использовании
                          этого ключа выделяются дополнительные имена
                          переменных. Формат m-n представляет собой диапазон
                          подстрок с номерами от m по n. Если последний знак
                          в строке tokens= является звездочкой, создается
                          дополнительная переменная, значением которой будет
                          весь оставшийся текст в строке после разбора
                          последней подстроки.
        usebackq        - применение новой семантики, при которой строка,
                          заключенная в обратные кавычки, выполняется как
                          команда, строка, заключенная в прямые одиночные
                          кавычки, является строкой-литералом, а двойные
                          кавычки могут использоваться для задания имен
                          файлов в наборе.
Ответить

Вернуться в «Скриптовые языки администрирования Windows»