2015-03-05 2 views
0

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

Я начинаю простой. Мне нужен командный файл для чтения в файле и его чтение по строкам.
Если строка содержит слово «узел», я хотел бы, чтобы строка была напечатана в моей командной строке.

file1 = файл, который я прочитал, который был предоставлен пользователем.
эта часть произведение.

for /f "tokens=*" %%l in (%file1%) do (
    REM Find the lines that contain: node 
    if exist "node" in %%l (
     echo %%l 
    ) 
    REM for %%i in ('findstr "node" %%l') do (
     REM echo %%l 
    REM) 
) 

Часть, которую я прокомментировал, я также пробовал.
Но оба они не работают.
Это все время возвращать все линии.

Может ли кто-нибудь дать мне подсказку о том, что я делаю неправильно?

+0

Почему не просто узел 'findstr/i '"% file1% '? – rojo

+0

Но если я найду его, как я теперь, строка верна для этого слова? – Tenzin

+0

Это похоже на трюк. – Tenzin

ответ

3

Если вы просто хотите вывести соответствующую строку без каких-либо логической проверки, сделать

findstr /i "node" "%file1%" 

Если вы хотите выполнить некоторый код, если строка найдена, используйте conditional execution.

findstr /i "node" "%file1%" && (

    rem File contained "node". Do some stuff. 

) || (

    rem File did not contain "node". Do something else. 

) 

И если вы хотите использовать findstr, чтобы проверить на наличие строки без фактического сброса результата на консоль, просто добавьте >NUL либо до, либо после команды findstr.

>NUL findstr /i "node" "%file1%" && (success) || fail 
+0

Это похоже на то, что я могу использовать для этого. Это то, что у нас есть файл, который я просматриваю, линии, начинающиеся с «узла». В этих строках есть информация, которую мне нужно удалить: id = "TextId1" Нам нужно посмотреть, уникальны ли идентификаторы. Есть ли также простой способ извлечения «TextId1» из строки? Как будто это не воспринимается другим: visible = "blabla"? Я делаю программу в PLSQL и XML для своей работы. Я работаю там уже год. Это совершенно новое для меня снова. Но насколько я вижу сейчас, мне нравится настраивать. Очень эффективный. (Я недавно начал с этого в Unix для наших баз данных.) – Tenzin

+0

Если вы привыкли к инструментам * nix, вы можете установить GnuWin32 и восстановить свою способность использовать такие инструменты, как 'sed',' grep', 'less',' sort' и т. д. Самым простым решением было бы использовать 'grep -o' для получения идентификатора. Чтобы очистить значение, используя чистую партию, вы должны добавить примерный контент в свой вопрос. Он должен быть отделен контурами 'for'. Вообще говоря, захват вывода любой команды в пакете включает 'for/f'. Для получения подробной информации введите «help for» в окне консоли. – rojo

+0

@ Tenzin - PowerShell может извлекать подстрочные соответствия. См. Мой обновленный ответ. –

2

Если вы новичок в написании сценариев, я бы избегал пакетного сценария (shell script) и использовал PowerShell. PowerShell намного более мощный и гибкий.

get-content 'file.txt' | select-string 'node:(\s+)' | foreach-object { 
    $_.Matches[0].Groups[1].Value 
} 

Эта команда выводит первое соответствие подстроки (изнутри круглых скобок в регулярном выражении) из каждой строки.

+0

Я также рассмотрю эту оболочку. – Tenzin

+0

Билл, см. Комментарий ФП ниже моего ответа. Кажется, PowerShell становится правильным инструментом для работы. – rojo

+0

Я думаю, что у Unix и Powershell есть вещи, которые сделают их лучшим выбором. Я сделаю больше исследований по этому поводу. И я попробую оба варианта. :-) Спасибо, что упомянул об этом. Никогда не слышал об этом раньше. – Tenzin