0

我正在编写一个批处理脚本,它相当合理地依赖于“C:\WINDOWS\system32”作为 PATH 环境变量的一部分。我最近遇到了一台(开发人员的)机器,它的路径非常奇怪,不包括 system32,因此我的批处理脚本不起作用。

我查找了我的批处理脚本检查 PATH 变量的方法,如果它不存在则添加 system32 。但是,我发现使用的解决方案setx具有讽刺意味的是,它还依赖于 PATH 变量中的 system32。是否有任何编程方法可以将 system32 添加到 PATH 中而不存在它?

另外,请让我知道这是否是一种边缘情况,使我的脚本对它具有鲁棒性是没有意义的。我不希望我的任何典型用户拥有如此糟糕的 PATH 变量。我应该打扰吗?

4

2 回答 2

1

试试这个:

for /f "delims=" %%a in ("%comspec%") do set "PATH=%PATH%;%%~DPa"

或这个:

for /f "delims=" %%a in ("%comspec%") do set "compath=%%~DPa"
set "PATH=%PATH%;%compath:~0,-1%"
于 2013-08-07T18:49:05.330 回答
0
@ECHO OFF
SETLOCAL
SET "required=c:\windows\system32"

for %%p in ("%path:;=" "%") do (
 FOR %%j IN ("" \) DO (
  IF /i %%p=="%required%%%~j" GOTO :nextstep
 )
)

SETx PATH "%required%;%path%"
:nextstep

ECHO PATH=%path%

GOTO :EOF

这是我对这个问题的看法。PATH可能包含带或不带尾随的所需目录\,它可能有也可能没有前面或尾随;

我建议您检查一下操作SETX。它为 FUTURE cmd 会话设置环境变量,而不是 CURRENT 或 EXISTING 会话、AFAIAA ....也许不是为PATH或其他一些变量(我尝试在上面的批处理中PATH使用设置SETX- 未来的会话没有获得新的值集,但它似乎是根据regedit32- 也许它需要重新启动 - 在这个阶段没有进一步调查)

%path%请注意,如果我的观察得到证实,上述内容需要附加所需的目录......

于 2013-08-08T14:34:18.643 回答