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

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

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

Ветеран


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

Профиль | Отправить 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

 
mwz mwz вне форума

Аватара для mwz

Ушел из жизни


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

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


Цитата bredych:
а он не будет так искать с точкой в конце имени? »
А вы попробуйте такой файл создать.

-------
Mikhail Zhilin

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

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



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

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


Ветеран


Contributor


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

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


Цитата Iska:
В использовании pushd здесь вообще нет особого смысла. »
Если в логе не нужно имя файла, то смысл есть. Мы получаем бOльшую свободу в задании пути: можно, например, задавать путь в виде
D:\folder либо \\сетевой ресурс\шара
без переделки батника
Код: Выделить весь код
@Echo Off

Set "FLOG=%~n0.log"

rem Set "SOURCE=Z:\Soft_In\тра ля ля"
Set "SOURCE=\\192.168.1.1\test1\Soft_In\тра ля ля"

Set "Mask=*."
Set "mystring=над крылечком дым колечком"

Pushd "%SOURCE%" &&(
>"%FLOG%" (For /f "tokens=1* delims=:" %%i in ('findstr /i /l /s  /c:"%mystring%" "%Mask%"') Do Echo %%j)
popd)
Что касается привычек, то они вырабатываются опытом работы в команде. И, кроме того, через пару месяцев вы сэкономите своё же время при необходимости изменить минимум в батнике: исходные данные

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


Последний раз редактировалось megaloman, 24-07-2018 в 18:36.

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

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


Ветеран


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

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


Цитата megaloman:
Мы получаем бOльшую свободу в задании пути: можно, например, задавать путь в виде
D:\folder либо \\сетевой ресурс\шара
без переделки батника »
megaloman, всё равно не пойму, в чём принципиальная разница по сравнению с этим:
Код: Выделить весь код
Set "SOURCE=\\192.168.1.1\test1\Soft_In\тра ля ля"
…
>"%SOURCE%\%FLOG%" (For /f "tokens=1* delims=:" %%i in ('findstr /i /l /s  /c:"%mystring%" "%SOURCE%\%Mask%"') Do Echo %%j)
?!

Отправлено: 18:59, 24-07-2018 | #13


Ветеран


Contributor


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

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


Iska, вот примеры из того, что у меня есть под руками. Находимся Z:\

В командной строке делаем
findstr /i /l /s /c:"wmic" "Z:\Soft_In\тра ля ля\*.bat"

Получаем результат
Z:\Soft_In\тра ля ля\я180527.bat:wmic fsdir where "name='%DirName%'" get 'CreationDate' /format:csv

В командной строке делаем
findstr /i /l /s /c:"wmic" "Soft_In\тра ля ля\*.bat"

Получаем результат
Soft_In\тра ля ля\я180527.bat:wmic fsdir where "name='%DirName%'" get 'CreationDate' /format:csv

Аналогично при задании пути \\192.168.1.1\test1\Soft_In\тра ля ля"

Если в командном файле в For delims=: то номер токена при разборе придётся указывать свой в зависимости от способа описания пути

Применение Pushd в командном файле и
findstr /i /l /s /c:"wmic" "*.bat"

даёт возможность в любом случае брать для вывода второй токен.

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


Последний раз редактировалось megaloman, 24-07-2018 в 21:14.


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


Ветеран


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

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


megaloman, спасибо, ясно.

Первый пример несколько натянут, вполне можно перейти от относительного к абсолютному пути. Со вторым же вариантом:
Цитата megaloman:
при задании пути \\192.168.1.1\test1\Soft_In\тра ля ля" »
соглашусь.

Отправлено: 01:29, 25-07-2018 | #15


Аватара для YuS_2

Crazy


Contributor


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

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


Цитата Iska:
всё равно не пойму, в чём принципиальная разница по сравнению с этим »
Как пример, необходимость выполнения кода:
Код: Выделить весь код
findstr /i /l /s  /c:"%mystring%" "%SOURCE%\%Mask%"
в нескольких каталогах. Достаточно будет осуществлять переходы pushd (или cd), иначе придется дублировать целиком конструкции самого кода с путями...
Кроме того:
Цитата Iska:
можно перейти от относительного к абсолютному пути »
Если в выводе команды будут присутствовать только имена файлов, без перехода мы не получим правильные абсолютные пути к ним:
Код: Выделить весь код
for /f "delims=" %%i in ('dir /b/a-d "c:\temp\*.*") do echo %%~dpfi
- неправильно, если текущий каталог не равен "c:\temp"...
в отличие от:
Код: Выделить весь код
set "d=C:\TEMP"
pushd "%d%"
for /f "delims=" %%i in ('dir /b/a-d "*.*"') do echo %%~dpfi
popd

-------
scio me nihil scire. Ѫ


Отправлено: 06:09, 25-07-2018 | #16


Ветеран


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

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


YuS_2, Ваши комментарии понятны, но они не по делу и не по существу данног конкретного вопроса, в отличие от разъяснения коллеги megaloman.

Отправлено: 07:42, 25-07-2018 | #17


Аватара для YuS_2

Crazy


Contributor


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

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


Цитата Iska:
не по существу данног конкретного вопроса »
Это да, но привычка использования конкретных способов, это дело такое: напишешь код, а потом придется разбираться, почему не работает или почему коллега никак не может твой код поправить, или почему вдруг поправляет, но с помощью простого трехэтажного...
в общем, главная мысль в комментариях:
Цитата megaloman:
Что касается привычек, то они вырабатываются опытом работы в команде. И, кроме того, через пару месяцев вы сэкономите своё же время при необходимости изменить минимум в батнике: исходные данные »
и ничего более... в смысле, речь про принципиальную разницу

-------
scio me nihil scire. Ѫ


Последний раз редактировалось YuS_2, 25-07-2018 в 09:20.


Отправлено: 08:52, 25-07-2018 | #18


Ветеран


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

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


возникла похожая задачка...
Убить все задачи планировщика, где в имени встречается слово OneDrive. А имя там может включать в себя всякие уиды и черте-что еще.
Пока логика подсказывает громоздкую конструкцию из 3 циклов:

1) schtasks /query >%logfile%
2) findstr.exe /b /i /l /c:"Onedrive" >%log2%
3) for /f "tokens=1 delims= " %%i in (%log2%) schtasks /delete /tn "%%i" /f

но наверняка же можно это сделать как-то изящнее?

-------
Оснащение дурдомов компьютерами идёт полным ходом.
Об этом можно судить по комментариям в интернете.


Отправлено: 09:57, 15-03-2019 | #19


Ветеран


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

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


bredych, упакуйте содержимое полученного %logfile% в архив, каковой приложите к сообщению.

Отправлено: 10:19, 15-03-2019 | #20



Компьютерный форум 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




 
Переход