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

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

Ответить
Настройки темы
CMD/BAT - [решено] параметры цикла for для построчного анализа текстового файла?!

Пользователь


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

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


Добрый день!
Есть необходимость построчно проанализировать содержимое текстового файла. Никак не могу определиться с синтаксисом.
@for /f "tokens=*" %%A in (c:\text.txt) do @echo %%A – не работает

Отправлено: 15:52, 04-02-2008

 

Аватара для gora

Ушёл из жизни


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

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


Цитата Ingolder:
спасибо помогло "tokens=* delims=" »
Ingolder, проявите уважение к пользователям, желавшим Вам помочь и
Цитата gora:
Приведите здесь свой text.txt. »
Для меня, например, так и осталось загадкой почему у Вас не сработали другие предложенные варианты и что же в Вашем файле такого особенного, что они не сработали!?

Отправлено: 14:10, 11-08-2010 | #11



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

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

sur sur вне форума

Новый участник


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

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


запиши одной строкой
@for /f "tokens=*" %%A in (c:\text.txt) do @echo %%A

Последний раз редактировалось sur, 28-02-2011 в 20:29.


Отправлено: 16:13, 28-02-2011 | #12


Пользователь


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

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


Всем добрый день.

Пытаюсь считать содержимое текстового файла, чтобы проверить наличие внутри него отдельных ключевых слов. Проблема в том, что в имени файла находится пробел. Пробовал брать путь вместе с именем файла в двойные кавычки, но тогда это воспринимается просто как строка. Без кавычек режет до пробела. Подскажите как быть, я новичок в cmd.

Вот код:

Код: Выделить весь код
for /f "tokens=*" %%A in ("D:\InforSec\scripts\read_log\text_test_log tst.txt") do @echo %%A
Та же проблема с параметром команды find. Вот такой вариант не работает, хотя файл есть и в нем есть слово "error":

Код: Выделить весь код
find /I D:\InforSec\scripts\read_log\text_test_log tst.txt "error"

Последний раз редактировалось Burning Hell, 25-07-2017 в 14:00. Причина: Дополнение для команды поиска


Отправлено: 13:36, 25-07-2017 | #13


Ветеран


Contributor


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

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


Код: Выделить весь код
FOR /F "usebackq delims=" %%s IN ("D:\InforSec\scripts\read_log\text_test_log tst.txt") DO echo %%s
find /I "error" "D:\InforSec\scripts\read_log\text_test_log tst.txt" >nul &&Echo Error ||Echo Not Error

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


Последний раз редактировалось megaloman, 25-07-2017 в 15:21.

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

Отправлено: 15:11, 25-07-2017 | #14


Ветеран


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

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


Цитата Burning Hell:
хотя файл есть и в нем есть слово "error": »
никто же не мешает проверить
Код: Выделить весь код
@echo off
set "spath=D:\InforSec\scripts\read_log\text_test_log tst.txt"
set "sp=error"
if exist "%spath%" <"%spath%" >nul find /I "%sp%" && echo Действительно в файле "%spath%" есть искомое слово "%sp%" || echo Возможно проблемы с кодировкой файла
pause

Отправлено: 15:24, 25-07-2017 | #15


Пользователь


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

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


Возник еще вот какой вопрос.

Мне нужно проверить наличие в файле нескольких ключевых слов. Сейчас использую один цикл for для поиска одного слова (код ниже).

Код: Выделить весь код
for /f %%s in ('find /I "error" "%full_log_path%"') do (
	if %%s equ "error" (
	set flag=true) else (
	set flag=false)
)
Т.е., для поиска трех слов я пишу три таких цикла подряд.

Можно ли как-то оптимизировать это, т.е. проверить наличие в файле нескольких слов, используя вложенный цикл for или еще каким-либо образом?

Отправлено: 14:22, 26-07-2017 | #16


Ветеран


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

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


Цитата Burning Hell:
или еще каким-либо образом? »
Или ещё.
Код: Выделить весь код
type "%full_log_path%" | >nul 2>&1 findstr.exe /i /l /c:"word1" /c:"word2" /c:"word3" && echo Found || echo Not found
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:34, 26-07-2017 | #17


Пользователь


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

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


Iska, а включить это в условие можно как-нибудь? Если слова найдены, то соответствующий флаг = true, иначе = false

И вопрос по самому коду: что делает вот этот кусок кода:

Код: Выделить весь код
>nul 2>&1
Понимаю, что он что-то куда-то перенаправляет (в частности, куда-то перенаправляется поток ошибок), но не совсем понимаю, что и куда.

Последний раз редактировалось Burning Hell, 26-07-2017 в 15:01.


Отправлено: 14:45, 26-07-2017 | #18


Ветеран


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

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


Цитата Burning Hell:
Iska, а включить это в условие можно как-нибудь? Если слова найдены, то соответствующий флаг = true, иначе = false »
Код: Выделить весь код
type "%full_log_path%" | >nul 2>&1 findstr.exe /i /l /c:"word1" /c:"word2" /c:"word3" && set flag=true || set flag=false
Цитата Burning Hell:
что делает вот этот кусок кода: »
перенаправляет стандартный поток вывода (stdin, имеет номер 1, может не указываться) команды findstr.exe в пустое устройство (nul) и перенаправляет стандартный поток ошибок (stderr, имеет номер 2) в стандартный поток вывода (то есть, в данном случае, фактически, тоже в nul).
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:10, 26-07-2017 | #19


Пользователь


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

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


Iska, еще один сложный для меня момент хотел спросить.

У меня есть скрипт (код), в котором я хочу найти несколько фраз и вырезать из этих фраз подстроки.
Т.е., в коде есть строчка: lasr_port = 2289. Как мне вырезать в переменную номер порта, если номер этой строчки в исходном файле может меняться?

Отправлено: 15:39, 26-07-2017 | #20



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Создание текстового файла при условии его отсутствия в папке spilberg Скриптовые языки администрирования Windows 1 12-07-2009 15:58
[решено] Чтение текстового файла с неизвестным именем ZeroCrash AutoIt 4 01-07-2009 19:03
[решено] Заполнение формы на сайте, но с данными из текстового файла ZeroCrash AutoIt 2 24-06-2009 11:04
CMD/BAT - [решено] Как скопировать имя файла из текстового файла в код батника и т.д. Nun-Nun Скриптовые языки администрирования Windows 6 13-05-2009 13:28
CMD/BAT - [решено] вывод текстового файла на экран cmd idsp Скриптовые языки администрирования Windows 6 06-04-2009 07:18




 
Переход