У меня есть неприятная проблема, когда я хочу использовать функцию pipe (|) с опцией Shell CMF оболочки CALL: Label. У меня есть очень маленький пример (ниже): call-test.cmd и выходной файл.
Нуль проблемы был/должен передавать вывод CMD script в другую программу, например утилиту tee, или find. Например:
@call :Label-02 param | tee call-test.log
Запустится текущий командный файл на ярлыке Label-02 и выведет его на tee. К сожалению, использование символа трубы (|) в строке с опцией "звонок: метка" дает ошибку:
Invalid attempt to call batch label outside of batch script.
В то время как " вызов example.cmd | tee example.log" работает нормально.
Другое перенаправление IO работает нормально. Это единственный случай, когда используется " call: label pipe (|)", который терпит неудачу. Для меня это просто похоже на ошибку Windows.
Есть ли у кого-нибудь обходное решение и/или знать объяснение?
Спасибо, Будет ли
-
вывод вызова
c:\> call-test [start] label 03 :: p1 Invalid attempt to call batch label outside of batch script. Invalid attempt to call batch label outside of batch script. [done] Press any key to continue . . .
-
колл-тест
@echo off @rem call-test.cmd @rem _________________________________________________ @rem Test :label call option for .cmd files. @rem @echo ^ [start] @call :Label-03 p1 @call :Label-02 second | find " " @call :Label-02 second | tee call-test.log @goto Done @rem _________________________________________________ :Label-01 @echo ^ label 01 :: %1 @goto Exit @rem _________________________________________________ :Label-02 @echo ^ label 02 :: %1 @goto Exit @rem _________________________________________________ :Label-03 @echo ^ label 03 :: %1 @goto Exit @rem _________________________________________________ :Done @echo ^ [done] @pause @rem _________________________________________________ :Exit @exit /b