我有一个文本文件list.txt
,由以下目录组成。
C:\Program Files\gs\gs9.07\bin
C:\Program Files (x86)\Adobe\Reader 11.0\Reader
C:\Program Files (x86)\Google\Chrome\Application
C:\Program Files (x86)\cwRsync\bin
C:\Program Files (x86)\PDF Labs\PDFtk Server\bin
我想创建一个批处理文件,将list.txt
中的每个项永久地附加到系统PATH
环境变量。
我失败的尝试如下。
rem batch.bat
for /f "delims=" %%x in (list.txt) do (setx PATH "%PATH%;%%x" /m)
我使用管理权限调用batch.bat
但没有附加到PATH
。你能帮我解决一下吗?
答案 0 :(得分:1)
@ECHO OFF
setlocal
SET testvar=%PATH%
FOR /f "delims=" %%x IN (list.txt) DO (
CALL SET testvar=%%testvar%%%%x;
)
setx testvar "%testvar%"
好吧 - 这会为将来的调用设置'testvar' - 我不想改变我的PATH
;现有实例(包括当前实例)将保持不变(如文档所述)。
实现的问题在于,当解析FOR循环时,在执行循环之前,任何%var%
都会被其当时存在的值替换。结果,您的命令被执行为
setx path "(yourexistingpath);C:\Program Files\gs\gs9.07\bin"
setx path "(yourexistingpath);C:\Program Files (x86)\Adobe\Reader 11.0\Reader"
...
应该根据您附加的文件中的最后一行设置路径。
...当然,在CURRENT环境中设置TESTVAR
所需要做的就是删除SETLOCAL
(实际上只是为了在测试时保持环境清洁)或者添加一行
ENDLOCAL&set testvar=%testvar%