【发布时间】:2016-04-12 17:09:19
【问题描述】:
我正在尝试在 Windows 批处理文件中实现逻辑“如果%MyBinaryDir% 尚未在系统的开头%PATH%,则将其放在那里;如果它已经在那里,则什么也不做”。
我有这个:
@echo %PATH% | findstr /i /b /c:"%MyBinaryDir%;" > nul || set "PATH=%MyBinaryDir%;%PATH%
这一直很有效,直到我尝试在某人的机器上进行部署,由于某种神秘的原因,%PATH% 变量包含奇数个引号字符。
问题归结为:
@set x="
@echo %x%
@echo %x% | more
第二行打印一个" 字符。第三行被引号字符绊倒,并且根本无法将echo 输出传递到第二个二进制文件(在我的情况下为findstr,但在这个简化的示例中more)。相反,它会逐字打印字符:
" | more
所以我的问题是:
(Y) 如何安全地将 any 任意字符串传送到第二个二进制文件中?
和/或
(X) 有没有一种方法可以有条件地将目录添加到系统路径以避免这种混乱?
【问题讨论】:
-
我想一种解决方案是编写一个名为
echopath.bat的单独批处理文件,其中包含单行@echo %PATH%,然后将其调用为@call echopath | findstr ...但我想将解决方案全部保留在如果可能,一个文件。 -
您的应用程序是否需要要添加的目录?如果它不在路径中,是否可以简单地添加它?
-
@Magoo “如果它不在路径中,是否可以简单地添加它?”啊,经过最初的困惑,我明白了。您的意思是“如果它在路径中的 anywhere 中,不一定在开头”。不,它必须在开头。
%PATH%可能并且经常确实包含多个C:\PythonXX目录,我想确保我选择的目录被提升到前面,因此保证在我输入python.exe时可以访问
标签: batch-file path pipe environment-variables