通过重定向的呼叫的意外功能



我对脚本有一个问题,所以我去了SS64.com。

在查看呼叫命令的页面时,我遇到了这一行:

与&|<>也无法正常工作。

但是,该页面以及我所看的其他任何地方都无法解释它的工作方式。我知道|通常可以做一些意外的事情,但我不知道其他事情。

这个意外的功能是什么?这取决于您如何使用呼叫命令(调用标签与脚本)?

我想罗布想到这样的事情:

call :func | more
exit /b
:func
echo line1
echo line2
exit /b

或类似

的东西
setlocal EnableDelayedExpansion
set var=Line2
( echo Line1
echo !var! ) | more

为此,可以在(您提到的)上找到解释
因此:为什么在代码的管道内部块内部延迟扩展会失败?

,但第一步中的重定向与预期(和其他字符)一起使用CALL

call echo Hello > output.txt

但是,如果您尝试在呼叫命令的第二个扩展中使用任何特殊字符,则将不会执行完整命令。
关于批处理解析器的CALL的特殊效果,请在
上描述因此:cmd.exe解析脚本如何?(尤其是第6阶段)

set "myCmd=echo 1 & echo 2"
call %%myCmd%%

%%的效果是,第一个扩展会导致%myCmd%中的第一个扩展,并且内容的实际扩展将在解析器的第二次运行之前才能完成,因此&必须在call上下文中进行解释。

,这也将一无所有(由于括号,)

set "myCmd=echo Line1"
call (%%myCmd%%)

但这将显然呼叫一个名为 1.bat

的批处理文件
echo echo Hello > 1.bat
set "myCmd=echo Line1 && echo Line2"
call (%%myCmd%%)
echo End

这是在dostips上讨论的:打电话给我,或者最好避免呼叫
目前,我想,CALL以某种方式使用令牌,但无法以正确的方式处理它们。

最新更新