Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Поиск строки, содержащей текст, и копирование её в лог

Ответить
Настройки темы
CMD/BAT - [решено] Поиск строки, содержащей текст, и копирование её в лог

Ветеран


Сообщения: 2597
Благодарности: 247

Профиль | Отправить PM | Цитировать


Поиск строки, содержащей текст, и копирование её в лог.
Для кучи файлов, расположенных НЕ в одной папке, но внутри одного куста. Файлы НЕ имеют разрешения, потому фильтрация по типу файлов, используемая в разных примерах, не годится

Для файлов, лежащих в одной папке, срaбатывает код

Код: Выделить весь код
@echo off
setlocal enableextensions
set FLOG=%~n0.log
set "SOURCE=D:\pics\2\"
pushd "%SOURCE%"
(for /f "tokens=1,* delims=:" %%a in ('findstr /i /l /c:"mystring" "*.*"') do (
  echo(%%b
  )) > %FLOG%
popd
я добавил строку листинга директории с выводом краткой записи всех файлов из всего дерева в список и поиска среди них,

Код: Выделить весь код
@echo off
setlocal enableextensions
set FLOG=%~n0.log
set "SOURCE=D:\pics\2\"
pushd "%SOURCE%"
for /f "delims=" %%i in ('dir /b /s *.*') do
(for /f "tokens=1,* delims=:" %%a in ('findstr /i /l /c:"mystring" "*.*"') do (
  echo(%%b
  )) > %FLOG%
popd
но ругается "некорректный синтаксис".
Где косячу - не понимаю ((

Отправлено: 22:09, 23-07-2018

 

Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата bredych:
Где косячу - не понимаю (( »
Здесь:
Код: Выделить весь код
findstr.exe /i /l /s /c:"mystring" "D:\pics\2\*.*"
Цитата bredych:
Файлы НЕ имеют разрешения, потому фильтрация по типу файлов, используемая в разных примерах, не годится »
Переведите, пожалуйста, на русский.
Это сообщение посчитали полезным следующие участники:

Отправлено: 00:10, 24-07-2018 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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

mwz mwz вне форума

Аватара для mwz

Ушел из жизни


Сообщения: 8595
Благодарности: 2127

Профиль | Сайт | Отправить PM | Цитировать


Цитата Iska:
Переведите, пожалуйста, на русский. »
Похоже что человек путает слова "расширение" и "разрешение".

-------
Mikhail Zhilin


Отправлено: 01:22, 24-07-2018 | #3


Ветеран


Сообщения: 2597
Благодарности: 247

Профиль | Отправить PM | Цитировать


Цитата Iska:
c:"mystring" "D:\pics\2\*.*" »
а разве замена "текущей папки" на указанную в переменной -
Код: Выделить весь код
pushd "%SOURCE%"
недостаточна, надо всё равно указывать путь к ней?
по идее, первый вариант отлично текущую папку меняет и лог создаётся в ней, а не папке батника, почему здесь потребовалось добавлять?

зы, да, расширение наверно ,более точный перевод extension

Отправлено: 11:14, 24-07-2018 | #4


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


Цитата bredych:
Файлы НЕ имеют разрешсширения, »
Маска при этом "*."

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 11:29, 24-07-2018 | #5


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата bredych:
а разве замена "текущей папки" на указанную в переменной - … недостаточна»
В использовании pushd здесь вообще нет особого смысла. Весь код умещается фактически в одну строку (с добавлением вывода в лог и отсутствием расширения в маске файлов):
Код: Выделить весь код
>"D:\pics\2\%~n0.log" findstr.exe /i /l /s /c:"mystring" "D:\pics\2\*."
Если вынести определение целевого каталога (здесь — D:\pics\2) отдельной переменной окружения — то в две.
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:57, 24-07-2018 | #6


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


Если в логе не нужно имя файла, то
Код: Выделить весь код
@Echo Off

Set "FLOG=%~n0.log"
Set "SOURCE=Z:\Soft_In\тра ля ля"
Set "Mask=*."
Set "mystring=над крылечком дым колечком" 

>"%SOURCE%\%FLOG%" (For /f "tokens=2* delims=:" %%i in ('findstr /i /l /s  /c:"%mystring%" "%SOURCE%\%Mask%"') Do Echo %%j)
Примечание: у меня скверная привычка все параметры, которые могут подстраиваться под задачу, выносить вверх, за счет этого много строк.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:07, 24-07-2018 | #7


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата megaloman:
Примечание: у меня скверная привычка все параметры, которые могут подстраиваться под задачу, выносить вверх, »
Это хорошая, правильная привычка.

Отправлено: 12:12, 24-07-2018 | #8


Ветеран


Сообщения: 2597
Благодарности: 247

Профиль | Отправить PM | Цитировать


Цитата megaloman:
Маска при этом "*." »
а он не будет так искать с точкой в конце имени?

Цитата Iska:
>"D:\pics\2\%~n0.log" findstr.exe /i /l /s /c:"mystring" "D:\pics\2\*." »
ээ... хм.. но если вывод в лог сначала, то лог же пустой должен быть, в буфере же еще ничего нет до обработки команды... почему он всё равно даёт?
Цитата Iska:
В использовании pushd здесь вообще нет особого смысла. »
ну, собсно, в плане обучения правильному подходу - всё выносить в переменные, чтоб потом не искать баги.. но в одну строку действительно код красивее. Только одна деталь: он даёт и имена файлов тоже. А мне эотго не надо, мне только саму строку.
Так что, походу, придется ограничиться добавкой одного ключа /s , а фильтрацию вывода (только после двоеточия) оставить.

Цитата megaloman:
у меня скверная привычка »
я пытаюсь её вырабатывать у себя
спасибо

Отправлено: 12:19, 24-07-2018 | #9


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата bredych:
а он не будет так искать с точкой в конце имени? »
Только в одном случае — если у него не будет расширения.

Цитата bredych:
ээ... хм.. но если вывод в лог сначала, то лог же пустой должен быть, в буфере же еще ничего нет до обработки команды... почему он всё равно даёт? »
Это не «сначала». Перенаправление потоков может быть указано хоть перед командой, хоть после.

Цитата bredych:
он даёт и имена файлов тоже. А мне эотго не надо, мне только саму строку. »
Смотрите код коллеги megaloman, он как раз о том.
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:32, 24-07-2018 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Поиск строки, содержащей текст, и копирование её в лог

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Поиск строки и использование её части Ewgenyk Скриптовые языки администрирования Windows 0 06-12-2017 14:36
CMD/BAT - Поиск строки по слову и добавление новой строки после найденой. Mikhael2011 Скриптовые языки администрирования Windows 17 16-03-2017 03:37
CMD/BAT - Поиск и замена строки в txt файлах по содержанию этой строки. sayyad Скриптовые языки администрирования Windows 1 06-12-2015 13:20
CMD/BAT - Поиск цифр в текстовом файле и последующий их поиск в названии файлов массива (лог.) antares_80@vk Скриптовые языки администрирования Windows 10 25-10-2015 11:34
CMD/BAT - [решено] Поиск строки в файле и замена её на набор из случайных чисел и букв Sub-Zero Скриптовые языки администрирования Windows 6 08-02-2011 18:54




 
Переход