gpt4 book ai didi

batch-file - 带有重定向的 CALL 的意外功能

转载 作者:行者123 更新时间:2023-12-03 09:44:45 26 4
gpt4 key购买 nike

我的脚本有问题,所以我去了 ss64.com就像我通常做的那样,看看我可能会找到哪些 gem 来帮助我。

在看页面为CALL command我遇到了这条线:

Redirection with & | <> also does not work as expected.



但是,该页面以及我看过的几乎任何其他地方都没有解释它是如何意外工作的。我知道 the | can do some unexpected things in general但我不知道其他人。

这是什么意想不到的功能?这是否取决于您如何使用 CALL 命令(调用标签与脚本)?

最佳答案

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

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%并且内容的真正扩展将在解析器的第二次运行之前完成,因此 &必须在 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 me, or better avoid call 中讨论过
目前我想, CALL以某种方式使用 token ,但无法以正确的方式处理它们。

关于batch-file - 带有重定向的 CALL 的意外功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21460303/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com