如何将文本文件中提供的目录列表附加到PATH变量?

时间:2013-03-09 21:11:39

标签: windows batch-file dos

我有一个文本文件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。你能帮我解决一下吗?

1 个答案:

答案 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%