Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] FINDSTR работа с найденым файла (http://forum.oszone.net/showthread.php?t=267833)

a503593 10-09-2013 14:44 2215619

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

@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

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

Anonymоus 10-09-2013 16:11 2215674

Код:

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

a508475 10-09-2013 16:31 2215684

Спасибо! Все работает!
Не могли бы прокомментировать код, а то не совсем понимаю принцип работы.

Anonymоus 10-09-2013 16:58 2215701

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

a508475 10-09-2013 17:09 2215709

findstr этот шаг я сам делал, мне непонятно как раз с for
%%А - это переменная? в мануале к батнику написано что переменные обозначаются между знаками ! - например !j!
/f "delims=" что делает? делимс это какая то синтаксическая константа?

Anonymоus 10-09-2013 17:20 2215715

Цитата:

Цитата a508475
%%А - это переменная? »

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

Цитата a508475
/f "delims=" что делает? делимс это какая то синтаксическая константа? »

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

Код:

FOR /F ["ключи"] %переменная IN (`команда`) DO команда [параметры]
...Необязательный параметр "ключи" служит для переопределения правил разбора по умолчанию. Он представляет собой заключенную в кавычки строку, содержащую одно или несколько ключевых слов для определения параметров разбора.
читать дальше »
Код:

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




Время: 12:48.

Время: 12:48.
© OSzone.net 2001-