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

Аватара пользователя
bredych

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

Сообщение bredych »

Поиск строки, содержащей текст, и копирование её в лог.

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



Для файлов, лежащих в одной папке, ср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

но ругается "некорректный синтаксис".

Где косячу - не понимаю ((
Аватара пользователя
Iska

Re: CMD/BAT - [решено] Поиск строки, содержащей текст, и копирование её в лог

Сообщение Iska »

Цитата bredych:



Где косячу - не понимаю ((
CMD/BAT - [решено] Поиск строки, содержащей текст, и копирование её в лог




Здесь:



Код:

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

findstr.exe /i /l /s /c:"mystring" "D:\pics\2\*.*"


Цитата bredych:



Файлы НЕ имеют разрешения, потому фильтрация по типу файлов, используемая в разных примерах, не годится
CMD/BAT - [решено] Поиск строки, содержащей текст, и копирование её в лог




Переведите, пожалуйста, на русский.
Аватара пользователя
mwz

Re: CMD/BAT - [решено] Поиск строки, содержащей текст, и копирование её в лог

Сообщение mwz »

Цитата Iska:



Переведите, пожалуйста, на русский.
CMD/BAT - [решено] Поиск строки, содержащей текст, и копирование её в лог




Похоже что человек путает слова "расширение" и "разрешение". Изображение
Аватара пользователя
bredych

Re: CMD/BAT - [решено] Поиск строки, содержащей текст, и копирование её в лог

Сообщение bredych »

Цитата Iska:



c:"mystring" "D:\pics\2\*.*"
CMD/BAT - [решено] Поиск строки, содержащей текст, и копирование её в лог




а разве замена "текущей папки" на указанную в переменной -



Код:

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

pushd "%SOURCE%"

недостаточна, надо всё равно указывать путь к ней?

по идее, первый вариант отлично текущую папку меняет и лог создаётся в ней, а не папке батника, почему здесь потребовалось добавлять?



зы, да, расширение наверно ,более точный перевод extension
Вложения
flog.zip
(2.49 КБ) 0 скачиваний
flog.zip
(2.49 КБ) 0 скачиваний
Аватара пользователя
bredych

Re: CMD/BAT - [решено] Поиск строки, содержащей текст, и копирование её в лог

Сообщение bredych »

Цитата bredych:



а разве замена "текущей папки" на указанную в переменной - … недостаточна
CMD/BAT - [решено] Поиск строки, содержащей текст, и копирование её в лог




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



Код:

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

>"D:\pics\2\%~n0.log" findstr.exe /i /l /s /c:"mystring" "D:\pics\2\*."

Если вынести определение целевого каталога (здесь — D:\pics\2) отдельной переменной окружения — то в две.
Аватара пользователя
megaloman

Re: CMD/BAT - [решено] Поиск строки, содержащей текст, и копирование её в лог

Сообщение megaloman »

Если в логе не нужно имя файла, то

Код:

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

@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)

Примечание: у меня скверная привычка все параметры, которые могут подстраиваться под задачу, выносить вверх, за счет этого много строк.
Аватара пользователя
Iska

Re: CMD/BAT - [решено] Поиск строки, содержащей текст, и копирование её в лог

Сообщение Iska »

Цитата megaloman:



Примечание: у меня скверная привычка все параметры, которые могут подстраиваться под задачу, выносить вверх,
CMD/BAT - [решено] Поиск строки, содержащей текст, и копирование её в лог




Это хорошая, правильная привычка.
Аватара пользователя
megaloman

Re: CMD/BAT - [решено] Поиск строки, содержащей текст, и копирование её в лог

Сообщение megaloman »

Цитата megaloman:



Маска при этом "*."
CMD/BAT - [решено] Поиск строки, содержащей текст, и копирование её в лог




а он не будет так искать с точкой в конце имени?




Цитата Iska:



>"D:\pics\2\%~n0.log" findstr.exe /i /l /s /c:"mystring" "D:\pics\2\*."
CMD/BAT - [решено] Поиск строки, содержащей текст, и копирование её в лог




ээ... хм.. но если вывод в лог сначала, то лог же пустой должен быть, в буфере же еще ничего нет до обработки команды... почему он всё равно даёт?


Цитата Iska:



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




ну, собсно, в плане обучения правильному подходу - всё выносить в переменные, чтоб потом не искать баги.. но в одну строку действительно код красивее. Только одна деталь: он даёт и имена файлов тоже. А мне эотго не надо, мне только саму строку.

Так что, походу, придется ограничиться добавкой одного ключа /s , а фильтрацию вывода (только после двоеточия) оставить.




Цитата megaloman:



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




я пытаюсь её вырабатывать у себя Изображение

спасибо Изображение
Аватара пользователя
Iska

Re: CMD/BAT - [решено] Поиск строки, содержащей текст, и копирование её в лог

Сообщение Iska »

Цитата bredych:



а он не будет так искать с точкой в конце имени?
CMD/BAT - [решено] Поиск строки, содержащей текст, и копирование её в лог




Только в одном случае — если у него не будет расширения.




Цитата bredych:



ээ... хм.. но если вывод в лог сначала, то лог же пустой должен быть, в буфере же еще ничего нет до обработки команды... почему он всё равно даёт?
CMD/BAT - [решено] Поиск строки, содержащей текст, и копирование её в лог




Это не «сначала». Перенаправление потоков может быть указано хоть перед командой, хоть после.




Цитата bredych:



он даёт и имена файлов тоже. А мне эотго не надо, мне только саму строку.
CMD/BAT - [решено] Поиск строки, содержащей текст, и копирование её в лог




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

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