2016-03-09 2 views
1

Когда я запускаю код, он выводит FIND: Parameter format not correct и The process tried to write to a nonexistent pipe.. Из этого я уверен, что цикл for не может обрабатывать канал и/или перенаправление. Я не уверен, что делать дальше, я пытался запустить его за пределами цикла, и это работает нормально, но внутри цикла он заманивает манекен. Кто-нибудь знает, почему, или как я могу это исправить?Почему эта труба не работает внутри цикла петли

@ECHO OFF 

setlocal enabledelayedexpansion 
for /F "tokens=*" %%a in (set_1.txt) do (
    type set_2.txt | find %%a > nul 
    if !errorlevel! EQU 1 (
     echo %%a 
    ) 
) 

endlocal 
pause 

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

+4

Вы должны попробовать его в командной строке первого 'типа некий-файл | find word' просто терпит неудачу, так как 'find' требует' 'word" 'в кавычках – jeb

+0

Зачем использовать здесь канал? почему бы просто не указать имя файла в качестве аргумента 'find', например' find '%% a "" set_2.txt "?? – aschipfl

ответ

4

type someFile | find word просто терпит неудачу, так как поиск требует «слова» в кавычках.

Так решение изменить строку

type set_2.txt | find "%%a" > nul 
if !errorlevel! EQU 0 (
    .... 

Или еще проще

type set_2.txt | find "%%a" > nul || echo %%a not found 
+0

Собственно, для целей этого скрипта это должно быть '||'. Я ищу строки в set_1, которые не находятся в set_2 и повторяют их. Следовательно, я хочу только echo '%% a', если' find '%% a "" не работает. Для получения дополнительной информации см. [SS64] (http://ss64.com/bash/syntax-redirection.html). –

+0

@IamaTerribleProgrammer, так как вы использовали 'if! Errorlevel! EQU 0' в коде вашего вопроса, '&&' является подходящей альтернативой ... – aschipfl

+0

Да, извините, я внес поправки в вопрос, чтобы отразить мои намерения. –

Смежные вопросы