Показать полную графическую версию : [решено] параметры цикла for для построчного анализа текстового файла?!
Добрый день!
Есть необходимость построчно проанализировать содержимое текстового файла. Никак не могу определиться с синтаксисом.
@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
ничего не выводит
Ingolder,
А конкретнее? Что происходит, неужели совсем ничего? Это возможно только если файл tex.txt пуст...Если это единственная строка в *.bat, то добавьте после неё "pause"
Это возможно только если файл tex.txt пуст »
А также, если файл c:\text.txt отсутствует по указанному пути или он содержит спец. символы, которые батник не может "разобрать". Приведите здесь свой text.txt.
если файл c:\text.txt отсутствует по указанному пути или он содержит спец. символы, которые батник не может "разобрать" » в данном случае было бы выдано сообщение об ошибке...
Приведите здесь свой text.txt » - действительно не помешало бы, а заодно и код пакетника, если таковой имеется...
1. Проверить кодировку файла
2. можно попробовать объединить: "tokens=* delims="
3. а еще перед циклом добавить setlocal enableextensions
Ingolder
11-08-2010, 09:33
спасибо помогло "tokens=* delims="
спасибо помогло "tokens=* delims=" »
Ingolder, проявите уважение к пользователям, желавшим Вам помочь и Приведите здесь свой text.txt. »
Для меня, например, так и осталось загадкой почему у Вас не сработали другие предложенные варианты и что же в Вашем файле такого особенного, что они не сработали!? :dont-know
запиши одной строкой
@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
хотя файл есть и в нем есть слово "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 или еще каким-либо образом?
или еще каким-либо образом? »
Или ещё.
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, а включить это в условие можно как-нибудь? Если слова найдены, то соответствующий флаг = 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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.