当我想在Windows CMD shell中使用CALL :Label选项的管道(|)功能时,我遇到了一个令人沮丧的问题。以下是一个非常简单的示例:call-test.cmd以及样本输出。
问题的核心是要将CMD脚本的输出导入到另一个程序中,例如tee实用程序或find命令。例如:
@call :Label-02 param | tee call-test.log
如何在带有标签Label-02的当前命令文件中启动命令并将输出导入tee。但是,在具有"call :label"选项的行上使用管道字符(|)会导致错误:
Invalid attempt to call batch label outside of batch script.
虽然"call example.cmd | tee example.log"可以正常工作。
另一种IO重定向>也可以正常工作,只有在使用"call :label pipe(|)"时才会出现问题。在我看来,这似乎是Windows的一个错误。
有人知道解决方法和/或解释吗?
谢谢, Will
调用测试输出
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
@echo off
,你就不必在每一行前面加上@
符号。 - Dennis Williamsonecho
时,我只能看到重要的命令。 - will