Войти

Показать полную графическую версию : [решено] FINDSTR работа с найденым файла


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

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

a508475
10-09-2013, 16:31
Спасибо! Все работает!
Не могли бы прокомментировать код, а то не совсем понимаю принцип работы.

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

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

Anonymоus
10-09-2013, 17:20
%%А - это переменная? »
Это внутренняя переменная, которая работает только внутри цикла For.
/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 - применение новой семантики, при которой строка,
заключенная в обратные кавычки, выполняется как
команда, строка, заключенная в прямые одиночные
кавычки, является строкой-литералом, а двойные
кавычки могут использоваться для задания имен
файлов в наборе.




© OSzone.net 2001-2012