我试图在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)我如何安全地将任意字符串导入到第二个二进制文件中?
和/或
(X)有没有一种条件性地将目录添加到系统路径的方法,以避免这种混乱?
echopath.bat
的单独批处理文件,其中包含单行@echo %PATH%
,然后将其作为@call echopath | findstr ...
调用。但如果可能的话,我想将解决方案全部保留在一个文件中。 - jez%PATH%
可能会经常包含多个C:\PythonXX
目录,我想确保我的选择被提升到前面,并且因此保证在我键入python.exe
时访问到它。 - jez