gpt4 book ai didi

windows - 无法附加到批处理文件中的环境变量

转载 作者:可可西里 更新时间:2023-11-01 10:12:49 24 4
gpt4 key购买 nike

我正在尝试将四个目录附加到 %pythonpath%。目录是:

  1. C:\src\tensorflow\models\research
  2. C:\src\tensorflow\models\research\object_detection
  3. ..\utils
  4. ..\邮件

当用户为 User42 时,%pythonpath% 始终设置为:

;C:\src\tensorflow\models\research\object_detection;..\utils;..\mail

为什么第一个路径被忽略/覆盖?

@echo off
if "%username%"=="User42" (
set pythonpath=%pythonpath%;C:\src\tensorflow\models\research
set pythonpath=%pythonpath%;C:\src\tensorflow\models\research\object_detection
) else (
:: Other path
)

:: This is common to all users
set pythonpath=%pythonpath%;..\utils;..\mail
echo %pythonpath%

最佳答案

Windows 命令处理器在以 ( 开始并以匹配的 ) 结尾的命令 block 中用语法 %VariableName% 替换所有环境变量引用命令 block 开始的下一个要执行的命令行的解析阶段。在这种情况下,这意味着 IF 条件的两个分支中的 all %pythonpath% 已被环境变量 的当前值替换pythonpathIF 条件执行之前。通过在命令提示符窗口中运行没有 @echo off 的批处理文件可以看到此行为,因为在这种情况下,Windows 命令处理器在执行前解析后输出命令行。

解决方案是使用 delayed expansion正如在 IFFOR< 上在命令提示符窗口 set/? 中运行时命令 SET 输出的帮助所解释的/strong> 示例,或者避免定义或修改环境变量并在同一命令 block 中再次引用它。

这是一个不使用延迟扩展的解决方案:

@echo off
set "Separator="
if defined pythonpath if not "%pythonpath:~-1%" == ";" set "Separator=;"
if /I "%username%" == "User42" (
set "pythonpath=%pythonpath%%Separator%C:\src\tensorflow\models\research;C:\src\tensorflow\models\research\object_detection"
) else (
rem Other path is added here to environment variable pythonpath.
)

rem This is common to all users. Variable pythonpath is defined definitely now.
for %%I in ("%CD%") do set "ParentPath=%%~dpI"
set "pythonpath=%pythonpath%;%ParentPath%utils;%ParentPath%mail"
echo %pythonpath%

它还确保在 pythonpath 的值中没有 ;; 以防末尾已经有分号。如果这个环境变量在第一个 IF 条件之前根本不存在,它确保 pythonpath 没有在开始时用 ; 定义。

此外,没有相对路径添加到 pythonpath,因为在附加之前确定了 ..\utils..\mails 的绝对路径它们到 pythonpath

要了解使用的命令及其工作原理,请打开命令提示符窗口,在其中执行以下命令,并仔细阅读为每个命令显示的所有帮助页面。

  • echo/?
  • 如果/?
  • rem/?
  • 设置/?

顺便说一句:无效标签 :: 作为注释不应在命令 block 中使用。这可能会导致执行时出现未定义的行为。使用命令 REM 进行评论更安全。

关于windows - 无法附加到批处理文件中的环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51939916/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com