Почему я постоянно получаю сообщение об ошибке Неверный синтаксис команды

Может ли кто-нибудь объяснить мне, почему эта команда сообщает «Неверный синтаксис команды»? Первая часть работает нормально сама по себе, так что я знаю, что это не так. И вторая часть выглядит правильной согласно help find

C:\Program Files\Apache Software Foundation\Apache2.2\logs>type error.log ^| find /C "2010"

Мне было интересно, может ли это быть связано с окончаниями строк в файле, но даже что-то настолько простое, как это, дает мне ту же ошибку:

C:\Program Files\Apache Software Foundation\Apache2.2\logs>echo "Test1" > test.log

C:\Program Files\Apache Software Foundation\Apache2.2\logs>echo "Test2" >> test.log

C:\Program Files\Apache Software Foundation\Apache2.2\logs>echo "Test3" >> test.log

C:\Program Files\Apache Software Foundation\Apache2.2\logs>type test.log
"Test1"
"Test2"
"Test3"

C:\Program Files\Apache Software Foundation\Apache2.2\logs>type test.log ^| find /C "test"
The syntax of the command is incorrect.

C:\Program Files\Apache Software Foundation\Apache2.2\logs>type test.log ^| find /C "Test"
The syntax of the command is incorrect.

person Chris Bloom    schedule 16.09.2010    source источник
comment
Я думаю, вы могли бы получить лучший ответ на этот вопрос на SuperUser.com. Этот вопрос следует перенести туда.   -  person GrayWizardx    schedule 16.09.2010
comment
Я не хороший пакетный программист, но мне кажется, что вам не нужен символ ^ перед |.   -  person    schedule 16.09.2010
comment
Я рискну предположить и сказать, что ваша команда синтаксически неверна.   -  person Moses    schedule 16.09.2010


Ответы (1)


Вам нужно указать имя файла для команды find:

найти /C "тест" test.log

or

введите test.log | найти /C "тест"

person Joachim VR    schedule 16.09.2010
comment
Ах хорошо. Это работает. В примере, на котором я основывался, использовалось ^| - чем это отличается от одного только персонажа трубы? - person Chris Bloom; 16.09.2010
comment
FWIW, дополнительный символ ^ работает в следующем контексте: C:\Program Files\Apache Software Foundation\Apache2.2\logs>dir /B ^| find /N "*.log" но эта команда не работает без ^ - person Chris Bloom; 16.09.2010
comment
Я считаю, что ^ является escape-символом. Если вы хотели | чтобы не иметь специального значения (выполнение команд по конвейеру), вы можете избежать знака с помощью ^. См. en.wikipedia.org/wiki/Escape_character#Windows_Command_Prompt. - person Grzegorz Oledzki; 16.09.2010
comment
А, теперь я вижу. Пример, из которого я взял это, на самом деле начинался как for /F "tokens=1,2 delims=[] " %%i in ('dir..., поэтому ^| экранировал | только в контексте команды for. Окончательная интерпретация будет просто трубой. Спасибо, что привели меня к этому осознанию. - person Chris Bloom; 16.09.2010
comment
PS: Мой предыдущий комментарий был фактически неправильным. Похоже, что C:\Program Files\Apache Software Foundation\Apache2.2\logs>dir /B ^| find /N "*.log" работало только потому, что конвейер экранировался, поэтому find никогда не запускался, и результаты выглядели правильно, потому что все в этой папке является файлом .log ^_^ - person Chris Bloom; 16.09.2010