Войти

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


Страниц : [1] 2 3

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

Petya V4sechkin
04-02-2008, 22:14
@for /f "delims=" %%A in (c:\text.txt) do @echo %%A

Ingolder
08-08-2010, 23:46
Petya V4sechkin, я так написал точьвточь - ничего не выдаёт.
как быть? мне тоже надо.

Petya V4sechkin
09-08-2010, 11:51
Ingolder, не стесняйтесь подробнее описывать проблему.

Ingolder
09-08-2010, 21:41
пишу в батнике:

@for /f "tokens=*" %%A in (c:\text.txt) do @echo %%A

не выводит вообще ничего.
куда ж уж подробнее?.

p.s. пишу:
@for /f "delims=" %%A in (c:\text.txt) do @echo %%A

ничего не выводит

deepred
09-08-2010, 22:36
Ingolder,

А конкретнее? Что происходит, неужели совсем ничего? Это возможно только если файл tex.txt пуст...Если это единственная строка в *.bat, то добавьте после неё "pause"

gora
10-08-2010, 08:31
Это возможно только если файл tex.txt пуст »
А также, если файл c:\text.txt отсутствует по указанному пути или он содержит спец. символы, которые батник не может "разобрать". Приведите здесь свой text.txt.

deepred
10-08-2010, 09:06
если файл c:\text.txt отсутствует по указанному пути или он содержит спец. символы, которые батник не может "разобрать" » в данном случае было бы выдано сообщение об ошибке...
Приведите здесь свой text.txt » - действительно не помешало бы, а заодно и код пакетника, если таковой имеется...

NiOl
10-08-2010, 12:09
1. Проверить кодировку файла
2. можно попробовать объединить: "tokens=* delims="
3. а еще перед циклом добавить setlocal enableextensions

Ingolder
11-08-2010, 09:33
спасибо помогло "tokens=* delims="

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

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

Burning Hell
25-07-2017, 13:36
Всем добрый день.

Пытаюсь считать содержимое текстового файла, чтобы проверить наличие внутри него отдельных ключевых слов. Проблема в том, что в имени файла находится пробел. Пробовал брать путь вместе с именем файла в двойные кавычки, но тогда это воспринимается просто как строка. Без кавычек режет до пробела. Подскажите как быть, я новичок в 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"

megaloman
25-07-2017, 15:11
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

alpap
25-07-2017, 15:24
хотя файл есть и в нем есть слово "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

Burning Hell
26-07-2017, 14:22
Возник еще вот какой вопрос.

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


for /f %%s in ('find /I "error" "%full_log_path%"') do (
if %%s equ "error" (
set flag=true) else (
set flag=false)
)


Т.е., для поиска трех слов я пишу три таких цикла подряд.

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

Iska
26-07-2017, 14:34
или еще каким-либо образом? »
Или ещё.
type "%full_log_path%" | >nul 2>&1 findstr.exe /i /l /c:"word1" /c:"word2" /c:"word3" && echo Found || echo Not found

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

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


>nul 2>&1


Понимаю, что он что-то куда-то перенаправляет (в частности, куда-то перенаправляется поток ошибок), но не совсем понимаю, что и куда.

Iska
26-07-2017, 15:10
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

что делает вот этот кусок кода: »
перенаправляет стандартный поток вывода (stdin, имеет номер 1, может не указываться) команды findstr.exe в пустое устройство (nul) и перенаправляет стандартный поток ошибок (stderr, имеет номер 2) в стандартный поток вывода (то есть, в данном случае, фактически, тоже в nul).

Burning Hell
26-07-2017, 15:39
Iska, еще один сложный для меня момент хотел спросить.

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




© OSzone.net 2001-2012