我遇到了一个脚本问题,所以我像往常一样去了
ss64.com看看我可能会找到哪些宝石来帮助我.
在查看CALL command的页面时,我遇到了这一行:
Redirection with & | <> also does not work as expected.
然而,那个页面和我看过的其他任何地方并没有解释它是如何工作的意外.我知道the
|
can do some unexpected things in general,但我不知道其他人.这意想不到的功能是什么?它取决于您如何使用CALL命令(调用标签vs脚本)?
最佳答案 我想Rob会想到这样的事情:
call :func | more
exit /b
:func
echo line1
echo line2
exit /b
或类似的东西
setlocal EnableDelayedExpansion
set var=Line2
( echo Line1
echo !var! ) | more
为此,可以在(你提到这个)找到解释
SO:Why does delayed expansion fail when inside a piped block of code?
但是第一步中的重定向与预期的CALL(以及其他字符)一起使用
call echo Hello > output.txt
但是如果您尝试在CALL命令的第二次扩展中使用任何特殊字符,则不会执行完整命令.
关于CALL对批处理解析器的特殊效果的描述如下
SO:How does the CMD.EXE parse scripts?(特别是第6阶段)
set "myCmd=echo 1 & echo 2"
call %%myCmd%%
双%%具有第一次扩展导致%myCmd%的效果,并且内容的实际扩展将在第二次运行解析器之前完成,因此&必须在调用上下文中进行解释.
而且这也不会产生任何结果(因为括号)
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 me, or better avoid call讨论过
目前我认为,CALL以某种方式使用令牌,但无法以正确的方式处理它们.