gpt4 book ai didi

batch-file - Windows 环境变量值中的引号

转载 作者:行者123 更新时间:2023-12-04 00:59:34 27 4
gpt4 key购买 nike

我试图在 Windows 批处理文件中实现逻辑“如果 %MyBinaryDir% 尚未位于系统 %PATH% 的开头,然后把它放在那里;如果它已经在那里,什么也不做。”

我有这个:

@echo %PATH% | findstr /i /b /c:"%MyBinaryDir%;" > nul || set "PATH=%MyBinaryDir%;%PATH%

这一直工作得很好,直到我试图在某人的机器上部署,但出于某种不可思议的原因,%PATH% 变量包含奇数个引号字符。

问题归结为:

@set x="
@echo %x%
@echo %x% | more

第二行打印单个 " 字符。第三行被引号字符绊倒,无法将 echo 输出通过管道传输到第二个二进制文件(在我的case findstr,但在这个简化的示例中 more)。相反,它按字面打印字符:

" | more

所以我的问题是:

(Y) 如何安全地将任何任意字符串传输到第二个二进制文件中?

和/或

(X) 有没有一种方法可以有条件地将目录添加到系统路径中来避免这种困惑?

最佳答案

使用延迟扩展以安全的方式回显任何变量内容。

setlocal EnableDelayedExpansion
set x="
echo !x!
echo !x! | more
echo !path! | more

为了保证空变量的安全,您可以使用 echo(

echo(!path! | more

还有一个关于pretty print/split the path variable的问题

关于batch-file - Windows 环境变量值中的引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34669912/

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